Jar*_*rrr 3 c# performance unity-container console-application
作为团结基本演示的一部分,我创建了以下控制台应用程序(有点冗长):
IUnityContainer container = new UnityContainer();
container.RegisterType<ISimpleClass, SimpleClass>();
container.RegisterType<ISingletonWithUnity, SingletonWithUnity>(new ContainerControlledLifetimeManager());
double N = 10000;
double sum = 0;
Console.WriteLine("Testing performace of a basic new object");
for (int i = 0; i < N; i++)
{
DateTime start = DateTime.Now;
ISimpleClass simpleClass = new SimpleClass();
DateTime end = DateTime.Now;
sum += (end - start).Milliseconds;
}
double average = sum/N;
Console.WriteLine("Average time for basic new object is: " + average);
Console.WriteLine("Testing performance of transient resolve using unity");
sum = 0;
for (int i = 0; i < N; i++)
{
DateTime start = DateTime.Now;
ISimpleClass simpleClass = container.Resolve<SimpleClass>();
DateTime end = DateTime.Now;
sum += (end - start).Milliseconds;
}
average = sum / N;
Console.WriteLine("Average time for transient resolve using unity is: " + average);
Console.WriteLine("Testing performance of basic singleton");
sum = 0;
for (int i = 0; i < N; i++)
{
DateTime start = DateTime.Now;
BasicSingltonClass basicSingltonClass = BasicSingltonClass.Instance;
DateTime end = DateTime.Now;
sum += (end - start).Milliseconds;
}
average = sum / N;
Console.WriteLine("Average time for basic singleton is: " + average);
Console.WriteLine("Testing performance of unity singleton");
sum = 0;
for (int i = 0; i < N; i++)
{
DateTime start = DateTime.Now;
SingletonWithUnity singletonWithUnity = container.Resolve<SingletonWithUnity>();
DateTime end = DateTime.Now;
sum += (end - start).Milliseconds;
}
average = sum / N;
Console.WriteLine("Average time for unity singleton is: " + average);
Run Code Online (Sandbox Code Playgroud)
测试中使用的类非常简单:
随着N越来越高(高达100万),我得到的结果显示使用单位实际上要慢得多,然后才使用它.我以前认为Unity有某种结果的缓存,这样可以使它更快,特别是在瞬态解析中.
以下是N设置为10,000时运行性能测试应用程序的结果示例:
测试基本新对象的性能基本新对象的平均时间为:0.0007
使用单位测试瞬态分辨率的性能使用单位的瞬态分辨的平均时间是:0.008
基本单例的测试性能基本单例的平均时间为:0.0012
统一单身的测试性能统一单身的平均时间是:0.0033
按任意键继续 ...
正如您所看到的,使用Unity会对性能产生影响.我想就你在幕后发生什么来解释这些结果得到你的诚实意见.
提前致谢!
请记住,Unity必须为接口找到适当的具体类,然后如果找到它,则构造它.即使缓存解析也不会改变这样一个事实,即只需要自己新建对象就可以进行额外的方法调用和(可能是缓存的)查找.
Unity并不是真正旨在提高对象创建性能.它旨在提供一个强大的DI容器,可以帮助减少耦合并简化代码测试.
| 归档时间: |
|
| 查看次数: |
1597 次 |
| 最近记录: |