因为我已经创建了统一基本呈现以下控制台应用程序(有点冗长)的一部分:UnityContainer性能测试结果
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);
在测试中使用的类是非常直截了当:
- SimpleClass只是一个空类
- BasicSingletonClass正是它对实例getter使用通常的双重检查锁定。
- SingletonWithUnity也只是一个空的类,但你可以看到它已经在ContainerControlleredLifetimeManager中注册了。
我得到的结果是N越高(高达100万),表明使用统一性实际上要慢得多,不使用它。我曾经认为Unity有某种形式的缓存缓存,可以让它更快,特别是在瞬态解决方案中。
下面是运行时,N被设置为10,000性能测试应用的结果的一个例子:
的基本新对象基本新对象 平均时间测试服务表现为:0.0007
使用单位测试瞬态解析的性能 使用单位的瞬态解析的平均时间为:0.008
基本单例测试性能 基本si的平均时间ngleton是:团结单身的统一单 平均时间0.0012
测试表现为:0.0033
按任意键继续。 。 。
正如你可以看到使用Unity是一个性能影响。 我想在幕后解释这些结果的真实意见。
在此先感谢!
我不认为它是用来增加对象的创建。但我对这些结果的幅度感到非常惊讶,因此我正在寻找解释为什么会发生这些结果 – JarJarrr 2011-06-01 07:46:37
不够公平。我想我不能回答关于具体的数量差异(虽然我认为额外的间接水平是负责任的)。您可能想尝试使用秒表,而不是DateTime.Now中的差异,因为分辨率会更高。 – dlev 2011-06-01 07:51:12