我們有一個使用溫莎城堡多年的大型網絡應用程序。該應用程序擁有約370個服務的組件註冊。它們幾乎全部屬於根,即入口點控制器。當網絡請求到來時,我們解析該入口控制器並讓它處理請求。問題是解決根組件需要大約35毫秒。我會說這聽起來對我來說非常重要。溫莎城堡3.2解決性能問題
我的問題是,如果上述數字聽起來很正常?任何人都可以給我提示我可以做些什麼來提高解決時間嗎?或者檢查我是否做錯了什麼?
謝謝:)
我們有一個使用溫莎城堡多年的大型網絡應用程序。該應用程序擁有約370個服務的組件註冊。它們幾乎全部屬於根,即入口點控制器。當網絡請求到來時,我們解析該入口控制器並讓它處理請求。問題是解決根組件需要大約35毫秒。我會說這聽起來對我來說非常重要。溫莎城堡3.2解決性能問題
我的問題是,如果上述數字聽起來很正常?任何人都可以給我提示我可以做些什麼來提高解決時間嗎?或者檢查我是否做錯了什麼?
謝謝:)
它需要多少時間來解決對象圖取決於很多因素,如:
所以沒有進一步的信息,沒有太多可說的。不過,我會說35毫秒。相當多,即使是溫莎城堡。我在6個最常用的DI容器上運行了一個小型基準,同時解決了881個瞬態組件的對象圖,最慢的容器(Ninject)花費了5毫秒,而最快的容器(Simple Injector)花了0.01毫秒(在我的機器上)解決這個問題圖形。
Container | ms.
----------------+-----
Simple Injector | 0.01
StructureMap | 0.50
Autofac | 0.77
Unity | 1.04
Castle Windsor | 3.96
Ninject | 5.03
從這個基準,我會說35毫秒。對於用Castle Windsor解決這個尺寸的對象圖有點慢。因此,請確保your injection constructors are simple與檢查null並存儲傳入的依賴關係無關。這樣你可以compose your object graphs with confidence。
順便說一句,你可以找到一個更廣泛的基準here。
你是怎麼評價這個的?在RELEASE模式下編譯並在調試器外部運行時,是否對此進行了基準測試? – Steven 2014-09-27 09:57:31
是的,我使用StopWatch來測量解析日誌所需的時間並將其寫入日誌。在發佈模式和調試器之外肯定。 – Thuan 2014-09-27 10:35:50