2011-11-14 38 views
1

我正在使用Spring.NET並運行時出現問題,長時間的Ioc容器加載時間。應用上下文配置只有少數(如10個對象),但有時需要20秒才能加載容器。我可以在調試器中看到這一次似乎是由於加載大量(DDL?)與奇數名稱。最終的結果是Windows服務需要很長時間才能啓動,IT運營商認爲它已經掛起。如何縮短Spring.NET DLL加載時間

我該怎麼做才能避免這種情況。我試過「只是我的代碼」。有任何想法嗎?

'Forge.Enterprise.Infrastructure.Scheduling.Server.vshost.exe' (Managed (v4.0.30319)): Loaded '0xclmvcv' 
'Forge.Enterprise.Infrastructure.Scheduling.Server.vshost.exe' (Managed (v4.0.30319)): Loaded 'rpuvyhdh' 
'Forge.Enterprise.Infrastructure.Scheduling.Server.vshost.exe' (Managed (v4.0.30319)): Loaded 'sq10jbae' 
'Forge.Enterprise.Infrastructure.Scheduling.Server.vshost.exe' (Managed (v4.0.30319)): Loaded 'tmpk4bvl' 
+0

您可以發佈您的配置文件嗎? – Marijn

+0

這些dll名稱看起來很像由.Net的['XmlSerializer'](http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx)創建的動態dll。但它們可能由別的東西產生。對於Aop,spring會動態創建代理,但該動態dll的名稱通常是'Spring.Proxy'。 [這個問題](http://stackoverflow.com/questions/2394699/net-dynamic-assemblies)有一個動態DLL的其他來源的答案。 – Marijn

+0

事實證明,這是Reflect.Emit緩慢的問題,尤其是當發佈具有非無效返回類型的方法時。在這種情況下,每種方法的成本大約是1-2秒。您對XmlSerializer DLL的權利,這些是針對我們爲XML序列化註釋的數據合同 –

回答

1

我被要求分享上面的評論作爲答覆他人認爲有用。

緩慢是在.NET c#Reflect.Emit中明確使用的。我們使用它來生成實現我們的ServiceContract單向操作的代理,以便它們通過NMS + ActiveMQ而不是WCF支持的傳輸。請求/響應只有返回類型而不是void,對於這些,每種方法的成本爲200-400ms。所以我分出了單向接口,以便它們不被代理。也就是說,如果春季AOP遭遇相同的性能問題,我不會感到驚訝......但也許只適用於DataContract大/返回類型