diff --git a/InterceptionBenchmarks/App.config b/InterceptionBenchmarks/App.config
index b2393a6..62d70de 100644
--- a/InterceptionBenchmarks/App.config
+++ b/InterceptionBenchmarks/App.config
@@ -12,11 +12,23 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/InterceptionBenchmarks/InterceptionBenchmarks.csproj b/InterceptionBenchmarks/InterceptionBenchmarks.csproj
index 01ad1f7..183ca0d 100644
--- a/InterceptionBenchmarks/InterceptionBenchmarks.csproj
+++ b/InterceptionBenchmarks/InterceptionBenchmarks.csproj
@@ -35,22 +35,34 @@
4
-
- ..\packages\Autofac.3.3.1\lib\net40\Autofac.dll
+
+ ..\packages\Autofac.4.3.0\lib\net45\Autofac.dll
True
-
- ..\packages\Autofac.Extras.DynamicProxy.4.0.0\lib\net451\Autofac.Extras.DynamicProxy.dll
+
+ ..\packages\Autofac.Extras.DynamicProxy.4.1.0\lib\net45\Autofac.Extras.DynamicProxy.dll
True
-
- ..\packages\BenchmarkDotNet.0.9.8\lib\net45\BenchmarkDotNet.dll
+
+ ..\packages\BenchmarkDotNet.0.10.2\lib\net45\BenchmarkDotNet.dll
+ True
+
+
+ ..\packages\BenchmarkDotNet.Core.0.10.2\lib\net45\BenchmarkDotNet.Core.dll
+ True
+
+
+ ..\packages\BenchmarkDotNet.Toolchains.Roslyn.0.10.2\lib\net45\BenchmarkDotNet.Toolchains.Roslyn.dll
True
..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll
True
+
+ ..\packages\Castle.Windsor.3.4.0\lib\net45\Castle.Windsor.dll
+ True
+
..\packages\LinFu.DynamicProxy.OfficialRelease.1.0.5\lib\net\LinFu.DynamicProxy.dll
True
@@ -87,8 +99,9 @@
..\packages\Unity.4.0.1\lib\net45\Microsoft.Practices.Unity.RegistrationByConvention.dll
True
-
- ..\packages\Ninject.3.2.0.0\lib\net45-full\Ninject.dll
+
+ ..\packages\Ninject.3.2.2.0\lib\net45-full\Ninject.dll
+ True
..\packages\Ninject.Extensions.Interception.3.2.0.0\lib\net45-full\Ninject.Extensions.Interception.dll
@@ -101,69 +114,73 @@
..\packages\Ninject.Extensions.Interception.Linfu.3.2.0.0\lib\net45-full\Ninject.Extensions.Interception.LinFu.dll
True
-
- ..\packages\SimpleInjector.3.1.2\lib\net45\SimpleInjector.dll
+
+ ..\packages\SimpleInjector.3.3.2\lib\net45\SimpleInjector.dll
True
- ..\packages\System.AppContext.4.1.0\lib\net46\System.AppContext.dll
+ ..\packages\System.AppContext.4.3.0\lib\net46\System.AppContext.dll
True
-
- ..\packages\System.Collections.Immutable.1.2.0\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll
+
+ ..\packages\System.Collections.Immutable.1.3.1\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll
True
-
- ..\packages\System.Console.4.0.0\lib\net46\System.Console.dll
+
+ ..\packages\System.Console.4.3.0\lib\net46\System.Console.dll
True
-
- ..\packages\System.Diagnostics.FileVersionInfo.4.0.0\lib\net46\System.Diagnostics.FileVersionInfo.dll
+
+ ..\packages\System.Diagnostics.FileVersionInfo.4.3.0\lib\net46\System.Diagnostics.FileVersionInfo.dll
True
-
- ..\packages\System.Diagnostics.StackTrace.4.0.1\lib\net46\System.Diagnostics.StackTrace.dll
+
+ ..\packages\System.Diagnostics.StackTrace.4.3.0\lib\net46\System.Diagnostics.StackTrace.dll
True
-
- ..\packages\System.IO.FileSystem.4.0.1\lib\net46\System.IO.FileSystem.dll
+
+ ..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll
True
-
- ..\packages\System.IO.FileSystem.Primitives.4.0.1\lib\net46\System.IO.FileSystem.Primitives.dll
+
+ ..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll
True
-
- ..\packages\System.Reflection.Metadata.1.3.0\lib\portable-net45+win8\System.Reflection.Metadata.dll
+
+ ..\packages\System.Reflection.Metadata.1.4.2\lib\portable-net45+win8\System.Reflection.Metadata.dll
True
- ..\packages\System.Security.Cryptography.Algorithms.4.2.0\lib\net461\System.Security.Cryptography.Algorithms.dll
+ ..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net461\System.Security.Cryptography.Algorithms.dll
+ True
+
+
+ ..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll
True
-
- ..\packages\System.Security.Cryptography.Encoding.4.0.0\lib\net46\System.Security.Cryptography.Encoding.dll
+
+ ..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll
True
-
- ..\packages\System.Security.Cryptography.Primitives.4.0.0\lib\net46\System.Security.Cryptography.Primitives.dll
+
+ ..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll
True
-
- ..\packages\System.Security.Cryptography.X509Certificates.4.1.0\lib\net461\System.Security.Cryptography.X509Certificates.dll
+
+ ..\packages\System.Text.Encoding.CodePages.4.3.0\lib\net46\System.Text.Encoding.CodePages.dll
True
-
- ..\packages\System.Text.Encoding.CodePages.4.0.1\lib\net46\System.Text.Encoding.CodePages.dll
+
+ ..\packages\System.Threading.Tasks.Extensions.4.3.0\lib\portable-net45+win8+wp8+wpa81\System.Threading.Tasks.Extensions.dll
True
-
- ..\packages\System.Threading.Thread.4.0.0\lib\net46\System.Threading.Thread.dll
+
+ ..\packages\System.Threading.Thread.4.3.0\lib\net46\System.Threading.Thread.dll
True
@@ -172,16 +189,20 @@
-
- ..\packages\System.Xml.XmlDocument.4.0.1\lib\net46\System.Xml.XmlDocument.dll
+
+ ..\packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll
+ True
+
+
+ ..\packages\System.Xml.XmlDocument.4.3.0\lib\net46\System.Xml.XmlDocument.dll
True
-
- ..\packages\System.Xml.XPath.4.0.1\lib\net46\System.Xml.XPath.dll
+
+ ..\packages\System.Xml.XPath.4.3.0\lib\net46\System.Xml.XPath.dll
True
-
- ..\packages\System.Xml.XPath.XDocument.4.0.1\lib\net46\System.Xml.XPath.XDocument.dll
+
+ ..\packages\System.Xml.XPath.XDocument.4.3.0\lib\net46\System.Xml.XPath.XDocument.dll
True
@@ -208,6 +229,9 @@
+
+
+
diff --git a/InterceptionBenchmarks/Program.cs b/InterceptionBenchmarks/Program.cs
index 0fca72c..c01cda0 100644
--- a/InterceptionBenchmarks/Program.cs
+++ b/InterceptionBenchmarks/Program.cs
@@ -1,4 +1,6 @@
using BenchmarkDotNet.Attributes;
+using BenchmarkDotNet.Attributes.Jobs;
+using BenchmarkDotNet.Order;
using BenchmarkDotNet.Running;
namespace InterceptionBenchmarks
@@ -11,7 +13,8 @@ static void Main()
}
}
- [Config("columns=Place")]
+ [OrderProvider(SummaryOrderPolicy.FastestToSlowest)]
+ [LegacyJitX86Job, LegacyJitX64Job, RyuJitX64Job]
public class Benchmark
{
private AutofacDecoratorBenchmark _autofacWithDecorator;
@@ -25,6 +28,9 @@ public class Benchmark
private SimpleInjectorDynamicProxyBenchmark _simpleInjectorWithDynamicProxy;
private UnityDecoratorBenchmark _unityWithDecorator;
private UnityInterceptionBenchmark _unityWithUnityInterception;
+ private WindsorBenchmark _windsor;
+ private WindsorDecoratorBenchmark _windsorWithDecorator;
+ private WindsorDynamicProxyBenchmark _windsorWithDynamicProxy;
[Setup]
public void Initialize()
@@ -40,6 +46,9 @@ public void Initialize()
_ninjectWithDecorator = new NinjectDecoratorBenchmark();
_ninjectWithDynamicProxy = new NinjectDynamicProxyBenchmark();
_ninjectWithLinFu = new NinjectLinFuBenchmark();
+ _windsor = new WindsorBenchmark();
+ _windsorWithDecorator = new WindsorDecoratorBenchmark();
+ _windsorWithDynamicProxy = new WindsorDynamicProxyBenchmark();
}
[Benchmark]
@@ -115,5 +124,23 @@ public void NinjectLinFu()
{
_ninjectWithLinFu.Run();
}
+
+ [Benchmark]
+ public void Windsor()
+ {
+ _windsor.Run();
+ }
+
+ [Benchmark]
+ public void WindsorWithDecorator()
+ {
+ _windsorWithDecorator.Run();
+ }
+
+ [Benchmark]
+ public void WindsorWithDynamicProxy()
+ {
+ _windsorWithDynamicProxy.Run();
+ }
}
}
\ No newline at end of file
diff --git a/InterceptionBenchmarks/WindsorBenchmark.cs b/InterceptionBenchmarks/WindsorBenchmark.cs
new file mode 100644
index 0000000..fab584c
--- /dev/null
+++ b/InterceptionBenchmarks/WindsorBenchmark.cs
@@ -0,0 +1,23 @@
+using Castle.MicroKernel.Registration;
+using Castle.Windsor;
+
+namespace InterceptionBenchmarks
+{
+ internal sealed class WindsorBenchmark
+ {
+ private readonly IWindsorContainer _container;
+
+ public WindsorBenchmark()
+ {
+ _container = new WindsorContainer();
+ _container.Register(Component.For().ImplementedBy());
+ }
+
+ public void Run()
+ {
+ var something = _container.Resolve();
+
+ something.Foo();
+ }
+ }
+}
\ No newline at end of file
diff --git a/InterceptionBenchmarks/WindsorDecoratorBenchmark.cs b/InterceptionBenchmarks/WindsorDecoratorBenchmark.cs
new file mode 100644
index 0000000..5f570c5
--- /dev/null
+++ b/InterceptionBenchmarks/WindsorDecoratorBenchmark.cs
@@ -0,0 +1,24 @@
+using Castle.MicroKernel.Registration;
+using Castle.Windsor;
+
+namespace InterceptionBenchmarks
+{
+ internal sealed class WindsorDecoratorBenchmark
+ {
+ private readonly IWindsorContainer _container;
+
+ public WindsorDecoratorBenchmark()
+ {
+ _container = new WindsorContainer();
+ _container.Register(Component.For().ImplementedBy());
+ _container.Register(Component.For().ImplementedBy());
+ }
+
+ public void Run()
+ {
+ var something = _container.Resolve();
+
+ something.Foo();
+ }
+ }
+}
\ No newline at end of file
diff --git a/InterceptionBenchmarks/WindsorDynamicProxyBenchmark.cs b/InterceptionBenchmarks/WindsorDynamicProxyBenchmark.cs
new file mode 100644
index 0000000..9ca4f6c
--- /dev/null
+++ b/InterceptionBenchmarks/WindsorDynamicProxyBenchmark.cs
@@ -0,0 +1,23 @@
+using Castle.MicroKernel.Registration;
+using Castle.Windsor;
+
+namespace InterceptionBenchmarks
+{
+ internal sealed class WindsorDynamicProxyBenchmark
+ {
+ private readonly IWindsorContainer _container;
+
+ public WindsorDynamicProxyBenchmark()
+ {
+ _container = new WindsorContainer();
+ _container.Register(Component.For().LifestyleTransient());
+ _container.Register(Component.For().ImplementedBy().LifestyleTransient().Interceptors());
+ }
+
+ public void Run()
+ {
+ var something = _container.Resolve();
+ something.Foo();
+ }
+ }
+}
\ No newline at end of file
diff --git a/InterceptionBenchmarks/packages.config b/InterceptionBenchmarks/packages.config
index 4f3293b..69c2f13 100644
--- a/InterceptionBenchmarks/packages.config
+++ b/InterceptionBenchmarks/packages.config
@@ -1,59 +1,63 @@
-
-
-
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 18df6e2..5dc9ca9 100644
--- a/README.md
+++ b/README.md
@@ -7,30 +7,76 @@ This small research project benchmarks between different IoC frameworks and thei
* Castle.DynamicProxy stand-alone
* SimpleInjector with MethodTimer.Fody
* Autofac with Castle.DynamicProxy
+* Castle.Windsor with Castle.DynamicProxy
What is being benchmarked is as follows:
* Creating or resolving `ISomething`;
* Calling `ISomething.Foo` on the resulting object;
* Timing the duration of the original method using a `Stopwatch`, either via interception or encapsulation (in a `TimingSomething`).
-A benchmark on my machine (i7 6700HQ, 16 GB) results in the following, YMMV:
-
-Method | Median | StdDev | Scaled | Place |
------------------------------------- |--------------: |-------------: |--------: |-----: |
-UsingNew | 53,0475 ns | 1,2048 ns | 1,00 | 1 |
-UsingSimpleInjector | 119,8636 ns | 2,9011 ns | 2,26 | 2 |
-UsingSimpleInjectorWithFody | 456,7976 ns | 16,0940 ns | 8,61 | 3 |
-UsingUnity | 995,3501 ns | 53,7859 ns | 18,76 | 4 |
-UsingAutofac | 1 192,0763 ns | 72,7590 ns | 22,47 | 5 |
-UsingDynamicProxyWithoutIoc | 4 219,4526 ns | 44,2089 ns | 79,54 | 6 |
-UsingSimpleInjectorWithInterception | 4 605,1258 ns | 329,7238 ns | 86,81 | 7 |
-UsingNinjectWithLinFuMethodInterception | 10 071,2066 ns | 573,8851 ns | 189,85 | 8 |
-UsingNinjectWithDynamicProxyMethodInterception | 10 239,9290 ns | 334,3963 ns | 193,03 | 8 |
-UsingNinject | 14 638,0324 ns | 1 104,9395 ns | 275,94 | 9 |
-UsingAutofacWithInterception | 15 580,4160 ns | 800,6822 ns | 293,71 | 9 |
-UsingNinjectWithLinFuInterceptorInterception | 16 633,1512 ns | 835,7362 ns | 313,55 | 9 |
-UsingNinjectWithDynamicProxyInterceptorInterception | 20 548,4465 ns | 1 030,3296 ns | 387,36 | 10 |
-UsingUnityWithInterception | 82 962,1605 ns | 3 280,7292 ns | 1 563,92 | 11 |
+A benchmark on my machine results in the following, YMMV:
+
+``` ini
+
+BenchmarkDotNet=v0.10.1, OS=Microsoft Windows NT 6.1.7601 Service Pack 1
+Processor=Intel(R) Xeon(R) CPU E3-1230 v5 3.40GHz, ProcessorCount=8
+Frequency=3328398 Hz, Resolution=300.4448 ns, Timer=TSC
+ [Host] : Clr 4.0.30319.42000, 32bit LegacyJIT-v4.6.1590.0
+ LegacyJitX64 : Clr 4.0.30319.42000, 64bit LegacyJIT/clrjit-v4.6.1590.0;compatjit-v4.6.1590.0
+ RyuJitX64 : Clr 4.0.30319.42000, 64bit RyuJIT-v4.6.1590.0
+ LegacyJitX86 : Clr 4.0.30319.42000, 32bit LegacyJIT-v4.6.1590.0
+
+Runtime=Clr
+
+```
+ Method | Job | Jit | Platform | Mean | StdErr | StdDev | Median | Scaled | Scaled-StdDev | Gen 0 | Gen 1 | Allocated |
+--------------------------- |------------- |---------- |--------- |--------------- |------------ |-------------- |--------------- |--------- |-------------- |------- |------- |---------- |
+ NoDIDecorator | LegacyJitX64 | LegacyJit | X64 | 43.0763 ns | 0.1139 ns | 0.4107 ns | 43.1737 ns | 1.00 | 0.00 | 0.0193 | - | 88 B |
+ NoDIDecorator | RyuJitX64 | RyuJit | X64 | 43.3912 ns | 0.2033 ns | 0.7874 ns | 43.8227 ns | 1.00 | 0.00 | 0.0197 | - | 88 B |
+ NoDIDecorator | LegacyJitX86 | LegacyJit | X86 | 45.6236 ns | 0.2585 ns | 0.9322 ns | 45.3657 ns | 1.00 | 0.00 | 0.0121 | - | 52 B |
+ SimpleInjectorDecorator | RyuJitX64 | RyuJit | X64 | 99.2894 ns | 0.4042 ns | 1.5655 ns | 98.8286 ns | 2.29 | 0.05 | 0.0143 | - | 88 B |
+ SimpleInjectorDecorator | LegacyJitX64 | LegacyJit | X64 | 105.7991 ns | 0.2137 ns | 0.7704 ns | 105.7662 ns | 2.46 | 0.03 | 0.0140 | - | 88 B |
+ SimpleInjectorDecorator | LegacyJitX86 | LegacyJit | X86 | 107.7937 ns | 1.1813 ns | 9.7409 ns | 103.7296 ns | 2.36 | 0.22 | 0.0064 | - | 52 B |
+ Windsor | RyuJitX64 | RyuJit | X64 | 254.7529 ns | 0.6250 ns | 2.4204 ns | 254.8930 ns | 5.87 | 0.12 | 0.0708 | - | 352 B |
+ Windsor | LegacyJitX86 | LegacyJit | X86 | 267.6785 ns | 1.4470 ns | 5.2173 ns | 267.2205 ns | 5.87 | 0.16 | 0.0307 | - | 184 B |
+ Windsor | LegacyJitX64 | LegacyJit | X64 | 273.7484 ns | 2.2989 ns | 8.9038 ns | 271.7756 ns | 6.36 | 0.21 | 0.0748 | - | 352 B |
+ WindsorWithDecorator | LegacyJitX86 | LegacyJit | X86 | 308.7305 ns | 1.1114 ns | 4.0072 ns | 310.0718 ns | 6.77 | 0.16 | 0.0376 | - | 212 B |
+ WindsorWithDecorator | RyuJitX64 | RyuJit | X64 | 318.1282 ns | 0.9109 ns | 3.5280 ns | 317.3877 ns | 7.33 | 0.15 | 0.0808 | - | 392 B |
+ WindsorWithDecorator | LegacyJitX64 | LegacyJit | X64 | 320.5461 ns | 2.4803 ns | 9.2804 ns | 316.1341 ns | 7.44 | 0.22 | 0.0798 | - | 392 B |
+ AutofacDecorator | RyuJitX64 | RyuJit | X64 | 683.5465 ns | 3.9890 ns | 15.4495 ns | 684.6195 ns | 15.76 | 0.44 | 0.2202 | - | 1.03 kB |
+ AutofacDecorator | LegacyJitX64 | LegacyJit | X64 | 692.3211 ns | 5.2402 ns | 18.8937 ns | 693.4978 ns | 16.07 | 0.45 | 0.2202 | - | 1.03 kB |
+ AutofacDecorator | LegacyJitX86 | LegacyJit | X86 | 792.5910 ns | 5.2425 ns | 19.6158 ns | 787.7405 ns | 17.38 | 0.53 | 0.1053 | - | 552 B |
+ UnityDecorator | LegacyJitX64 | LegacyJit | X64 | 863.8761 ns | 2.9232 ns | 10.9377 ns | 861.7129 ns | 20.06 | 0.31 | 0.0946 | - | 584 B |
+ UnityDecorator | LegacyJitX86 | LegacyJit | X86 | 892.8893 ns | 2.2558 ns | 8.7367 ns | 891.9811 ns | 19.58 | 0.42 | 0.0247 | - | 316 B |
+ NoDILinFu | RyuJitX64 | RyuJit | X64 | 961.0477 ns | 2.5413 ns | 9.8425 ns | 959.6984 ns | 22.16 | 0.45 | 0.0860 | - | 560 B |
+ NoDILinFu | LegacyJitX64 | LegacyJit | X64 | 961.8167 ns | 2.1694 ns | 8.1170 ns | 960.1087 ns | 22.33 | 0.27 | 0.0860 | - | 560 B |
+ NoDILinFu | LegacyJitX86 | LegacyJit | X86 | 1,051.9075 ns | 3.5058 ns | 12.1443 ns | 1,049.1848 ns | 23.06 | 0.51 | 0.0198 | - | 292 B |
+ UnityDecorator | RyuJitX64 | RyuJit | X64 | 1,078.4906 ns | 5.1637 ns | 17.8876 ns | 1,080.3353 ns | 24.86 | 0.59 | 0.0926 | - | 584 B |
+ NoDIDynamicProxy | RyuJitX64 | RyuJit | X64 | 3,372.9961 ns | 8.0261 ns | 31.0851 ns | 3,372.7103 ns | 77.76 | 1.54 | 0.1068 | - | 1.23 kB |
+ NoDIDynamicProxy | LegacyJitX64 | LegacyJit | X64 | 3,414.3847 ns | 14.6465 ns | 54.8023 ns | 3,414.4761 ns | 79.27 | 1.43 | 0.1785 | - | 1.23 kB |
+ SimpleInjectorDynamicProxy | LegacyJitX64 | LegacyJit | X64 | 3,514.8951 ns | 15.7269 ns | 56.7043 ns | 3,511.6257 ns | 81.60 | 1.47 | 0.1190 | - | 1.23 kB |
+ SimpleInjectorDynamicProxy | RyuJitX64 | RyuJit | X64 | 3,547.0381 ns | 7.2157 ns | 26.9986 ns | 3,549.6552 ns | 81.77 | 1.56 | 0.1149 | - | 1.23 kB |
+ NoDIDynamicProxy | LegacyJitX86 | LegacyJit | X86 | 3,815.4190 ns | 12.5903 ns | 45.3951 ns | 3,805.9222 ns | 83.66 | 1.87 | - | - | 636 B |
+ SimpleInjectorDynamicProxy | LegacyJitX86 | LegacyJit | X86 | 3,979.3641 ns | 17.8181 ns | 64.2442 ns | 3,969.7763 ns | 87.25 | 2.16 | - | - | 636 B |
+ WindsorWithDynamicProxy | LegacyJitX86 | LegacyJit | X86 | 9,826.7359 ns | 94.0406 ns | 398.9805 ns | 9,680.6008 ns | 215.47 | 9.46 | 0.0773 | - | 1.91 kB |
+ WindsorWithDynamicProxy | LegacyJitX64 | LegacyJit | X64 | 10,047.3056 ns | 45.6781 ns | 170.9119 ns | 10,023.6441 ns | 233.26 | 4.38 | 0.4903 | - | 3.55 kB |
+ WindsorWithDynamicProxy | RyuJitX64 | RyuJit | X64 | 10,221.4229 ns | 21.7971 ns | 84.4198 ns | 10,245.0749 ns | 235.64 | 4.56 | 0.5066 | - | 3.55 kB |
+ AutofacDynamicProxy | LegacyJitX64 | LegacyJit | X64 | 10,317.9270 ns | 23.7183 ns | 85.5175 ns | 10,281.2826 ns | 239.55 | 2.91 | 0.4517 | - | 3.36 kB |
+ AutofacDynamicProxy | LegacyJitX86 | LegacyJit | X86 | 10,806.0978 ns | 68.8086 ns | 266.4945 ns | 10,697.3650 ns | 236.94 | 7.26 | - | - | 1.8 kB |
+ AutofacDynamicProxy | RyuJitX64 | RyuJit | X64 | 11,131.9703 ns | 35.4903 ns | 137.4535 ns | 11,083.5459 ns | 256.63 | 5.46 | 0.4517 | - | 3.36 kB |
+ NinjectDecorator | RyuJitX64 | RyuJit | X64 | 11,620.4688 ns | 36.0525 ns | 134.8962 ns | 11,590.7669 ns | 267.89 | 5.60 | 0.9867 | - | 5.69 kB |
+ NinjectDecorator | LegacyJitX86 | LegacyJit | X86 | 11,841.6502 ns | 40.3620 ns | 145.5271 ns | 11,832.9489 ns | 259.65 | 5.87 | 0.3357 | 0.0142 | 3.11 kB |
+ NinjectDecorator | LegacyJitX64 | LegacyJit | X64 | 11,859.4810 ns | 94.8736 ns | 342.0717 ns | 11,821.5368 ns | 275.34 | 8.04 | 0.9949 | - | 5.69 kB |
+ NinjectLinFu | LegacyJitX86 | LegacyJit | X86 | 14,112.2435 ns | 97.8361 ns | 378.9177 ns | 13,929.8848 ns | 309.44 | 10.00 | 0.3168 | 0.1628 | 3.48 kB |
+ NinjectLinFu | RyuJitX64 | RyuJit | X64 | 14,220.0373 ns | 107.1863 ns | 415.1309 ns | 14,061.1461 ns | 327.82 | 10.91 | 0.7975 | - | 6.37 kB |
+ NinjectLinFu | LegacyJitX64 | LegacyJit | X64 | 14,449.1019 ns | 67.3757 ns | 252.0967 ns | 14,401.5457 ns | 335.46 | 6.43 | 0.8301 | - | 6.39 kB |
+ NinjectDynamicProxy | LegacyJitX86 | LegacyJit | X86 | 17,041.6468 ns | 40.3722 ns | 145.5639 ns | 17,062.8622 ns | 373.67 | 7.82 | 0.1261 | 0.0041 | 3.42 kB |
+ NinjectDynamicProxy | LegacyJitX64 | LegacyJit | X64 | 18,127.0021 ns | 40.9216 ns | 153.1146 ns | 18,100.6744 ns | 420.85 | 5.17 | 1.0670 | - | 6.27 kB |
+ NinjectDynamicProxy | RyuJitX64 | RyuJit | X64 | 18,401.2353 ns | 39.0917 ns | 151.4013 ns | 18,372.1004 ns | 424.21 | 8.21 | 0.8301 | - | 6.32 kB |
+ UnityUnityInterception | LegacyJitX64 | LegacyJit | X64 | 70,888.8519 ns | 110.8290 ns | 399.5996 ns | 70,952.1367 ns | 1,645.80 | 17.57 | 1.1230 | - | 15.61 kB |
+ UnityUnityInterception | LegacyJitX86 | LegacyJit | X86 | 73,957.9882 ns | 326.4696 ns | 1,221.5376 ns | 73,943.6900 ns | 1,621.66 | 40.52 | - | - | 8.3 kB |
+ UnityUnityInterception | RyuJitX64 | RyuJit | X64 | 77,903.3277 ns | 763.5970 ns | 3,581.5872 ns | 76,311.4755 ns | 1,795.93 | 86.68 | 2.4414 | - | 15.61 kB |
+
For reference: