Performance
- Run-time performance
- Environment
- x86_64 Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz GenuineIntel GNU/Linux
- clang++3.4 -O2 -fno-exceptions /
gdb -batch -ex 'file ./a.out' -ex 'disassemble main'
- Environment
- Compile-time performance
- Environment
- x86_64 Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz GenuineIntel GNU/Linux
- clang++3.4 -O2 -fno-exceptions
- Environment
[Boost].DI header | Time [s] |
---|---|
#include <boost/di.hpp> |
0.050s |
Legend:
ctor = raw constructor: T(int i, double d);
inject = inject constructor: BOOST_DI_INJECT(T, int i, double d);
all = all types exposed from module: auto configure();
exposed = one type exposed from module: di::injector<T> configure();
* 4248897537 instances created
* 132 different types
* 10 modules
* 1862039751439806464 instances created
* 200 different types
* 10 modules
* 5874638529236910091 instances created
* 310 different types
* 100 different interfaces
* 10 modules
C++ Libraries
Library | [Boost].DI (See Performance) | dicpp | Google.Fruit |
---|---|---|---|
Version | 1.0.1 | HEAD | 2.0.2 |
Language | C++14 | C++11 | C++11 |
License | Boost 1.0 | Boost 1.0 | Apache 2.0 |
Linkage | header only | header only | library |
Dependencies | - | boost system/boost thread | - |
Approach | compile-time | run-time | compile/run-time |
Errors | compile-time errors | exceptions | compile-time errors/exceptions |
- To run benchmarks
cd benchmark && make
C++ vs Java vs C# Libraries
Library | [Boost].DI | Google.Guice | Dagger2 | Ninject |
---|---|---|---|---|
Language | C++14 | Java | Java | C# |
Version | 1.0.1 | 4.0 | 2.4 | 3.2 |
License | Boost 1.0 | Apache 2.0 | Apache 2.0 | Apache 2.0 |
Linkage | header only | jar | jar | dll |
Approach | compile-time | run-time | compile-time (annotation processor) | run-time |
Errors | compile-time errors | exceptions | compile-time errors | exceptions |
- Environment
- x86_64 Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz GenuineIntel GNU/Linux
- $CXX -O2/Java8/Mono4.2
- Baseline
- Manual object creation
Create a unique objects tree for each iterationTYPES: 64 BINDINGS: 0 ITERATIONS: 1024 |
||||||
---|---|---|---|---|---|---|
Clang-3.7 -O2 / Java8 / Mono4.2 --aot | Baseline | [Boost].DI | Google.Fruit | Google.Guice | Dagger2 | Ninject |
Compilation time | 0.063s | 0.376s | 2.329s / FRUIT_NO_LOOP_CHECK | 0.570s | 1.411s | 0.144s + 0.079s |
Executable size | 4.2K | 8.5K | 213K | - | - | - |
Execution time | 0.002s | 0.002s | 0.037s | 0.528s | 0.157s | 1.131s |
TYPES: 128 BINDINGS: 0 ITERATIONS: 1024 |
||||||
Compilation time | 0.082s | 0.706s | 4.375s / FRUIT_NO_LOOP_CHECK | 0.642s | 1.903s | 0.149s + 0.093s |
Executable size | 4.2K | 8.5K | 513K | - | - | - |
Execution time | 0.002s | 0.002s | 0.074s | 0.544s | 0.210s | 2.230s |
TYPES: 256 BINDINGS: 0 ITERATIONS: 1024 |
||||||
Compilation time | 0.131s | 1.328s | 9.641s / FRUIT_NO_LOOP_CHECK | 0.783s | 2.814s | 0.151s + 0.114s |
Executable size | 4.2K | 8.7K | 1.4M | - | - | - |
Execution time | 0.003s | 0.003s | 0.154s | 0.723s | 0.323s | 4.838s |
TYPES: 512 BINDINGS: 0 ITERATIONS: 1024 |
||||||
Compilation time | 0.215s | 2.459s | 23.924s / FRUIT_NO_LOOP_CHECK | 1.054s | 4.231s | 0.157s + 0.161 |
Executable size | 8.2K | 13K | 4.2M | - | - | - |
Execution time | 0.003s | 0.003s | 0.328s | 0.943s | 0.547s | 11.123s |
TYPES: 1024 BINDINGS: 0 ITERATIONS: 1024 |
||||||
Compilation time | 0.402s | 4.911s | 1m9.601s / FRUIT_NO_LOOP_CHECK | 1.357s | 5.943s | 0.167s + 0.258 |
Executable size | 12K | 17K | 15M | - | - | - |
Execution time | 0.004s | 0.004s | 0.765s | 1.334s | 0.998s | 21.808s |
- To run benchmarks
cd benchmark && make
Usage of C++ vs Java vs C# Libraries
Library | Bind Interface | Performance |
---|---|---|
[Boost].DI | ASM x86-64 | |
dicpp | ASM x86-64 | |
Google.Fruit | ASM x86-64 | |
Google.Guice | ||
Dagger2 | ||
Ninject |
Library | Bind Value | Performance |
---|---|---|
[Boost].DI | ASM x86-64 | |
dicpp | ASM x86-64 | |
Google.Fruit | ASM x86-64 | |
Google.Guice | ||
Dagger2 | ||
Ninject |
Library | Missing Bindings Error |
---|---|
[Boost].DI | |
dicpp | |
Google.Fruit | |
Google.Guice | |
Dagger2 | |
Ninject |