2011-11-14 21 views
1

Spring.NETを使用していて、問題の長いIocコンテナの読み込み時間に走っています。アプリコンテキスト設定はわずか10個のオブジェクトしか持っていませんが、コンテナを読み込むのに最大20秒かかることがあります。私はデバッガでこの時間は奇妙な名前のたくさんの(DDLs?)を読み込むことに起因するように見えることができます。最終的な結果は、Windowsサービスの起動に時間がかかり、ITオペレータはそれが掛かっていると思うことです。Spring.NET DLLの読み込み時間を短縮する方法

これを避けるにはどうすればよいですか。私は "Just My Code"を試しました。何か案は?

'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の場合、春は動的にプロキシを作成しますが、動的dllの名前は通常「Spring.Proxy」です。 [この質問](http://stackoverflow.com/questions/2394699/net-dynamic-assemblies)には、動的DLLのいくつかの他のソースに関する回答があります。 – Marijn

+0

これはReflect.Emitの遅さに問題があったことが判明しました。特に、void以外の戻り値の型を持つメソッドを送出しているときに発生しました。この場合、コストは各方法について約1〜2秒である。 XmlSerializer DLLに関するあなたの権利は、私たちのデータコントラクトのXMLシリアル化のためのアノテーションです –

答えて

1

上記のコメントを他の人が役に立つと思うように回答するよう求められました。

遅いのは.NET C#Reflect.Emitで明示的に使用されていました。私たちはServiceContractの一方向操作を実装するプロキシを生成し、WCFでサポートされているトランスポートの代わりにNMS + ActiveMQを経由するようにプロキシを生成します。リクエスト/レスポンスはvoidの代わりに戻り型を持つだけで、それぞれのメソッドに200〜400msのコストがかかります。だから私は、彼らがプロキシにならないように、インタフェースを分離する一方通行を分割しました。つまり、Spring AOPが同じパフォーマンスの問題を抱えていても驚くことはありませんが、おそらくDataContract arge/return型の場合のみです

関連する問題