2011-07-22 4 views
0

TypedFactoryInterceptorでメモリリークが発生したと考えられます。Windsor TypedFactoryInterceptorメモリリーク

次のシナリオを検討してください:上記の例で

[Factory] 
public interface IMyFactory 
{ 
    MySingleton GetInstance(); 
} 

[Singleton] 
public class MySingleton 
{ 
} 

[Singleton] 
public class MyController 
{ 
    public MyController(IMyFactory factory) 
    { 
     // using a for loop to simulate repeated calls to the factory instance over 
     // a long time 
     for(int i = 0; i < 100000; i++) 
     { 
      var instance = factory.GetInstance(); 
     } 
    } 
} 

をTypedFactoryInterceptorは、100000 WeakReferencesのリストを含むすべての(MySingletonの)同じターゲット・インスタンスにその時点のであろう。したがって、あるシングルトンがファクトリに依存して別のシングルトンのインスタンスを作成するシナリオでは、何十万というWeakReferencesとメモリリークが発生する可能性があります。

任意の考え:問題は(TypedFactoryInterceptor.Resolveで)ここにあるように、ソースコードを見ていくつかをやって

は、それが見えますか?

ありがとうございました。

答えて

1

これは、WeakReferenceが、完全なソリューションではなくWindsor 2.5のアーキテクチャ上の制限のためのワークフローであるというトリックの結果です。

これは、今後予定されているWindsor 3(WeakReferenceが含まれていない)で修正されています。

一時的な回避策として、私はあなたの最善の選択肢は、そのシングルトン(またはWindsor 3へのアップグレード)のための工場を使用しないことだと思います。

+0

ウィンザー3の情報源はありますか?私はGoogle上で何かを見つけることができないのですか? – Jeff

+0

どのような情報ですか?それはまだウィンザー、あなたはほとんど同じように使用する、変更の一覧はchangelogにあり、変更はbreakingchanges.txtに記載されています... –

+0

しかし、私はソースをビルドする必要がありますか?公式のベータ版などはありませんか? – Jeff

関連する問題