因爲我已經創建了統一基本呈現以下控制檯應用程序(有點冗長)的一部分: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