2011-01-28 13 views
0

私は現在、安全でない関数を指すデリゲートがガーベッジコレクションされるのを避けるために、C DLLのラッパークラスでスタティックデリゲートを使用しています。
クラスの複数のインスタンスをサポートする必要があるまで、これはうまくいきました。回避策は、静的デリゲートのリストを保持することですが、私はより簡単な解決策を探したいと思います。C#:ガベージコレクションからデリゲートを保存する(静的オプションなし)

答えて

3

オブジェクトが収集されないようにするには、そのオブジェクトへの参照を維持する必要があります。

静的クラスの静的メンバーは、アプリケーションの有効期間中稼動します。

たとえば、クラスの設計やプロジェクト設計によっては、さまざまなアプローチがあります。静的リストを維持することは悪い考えではないかもしれません。

私の唯一の質問は、デリゲートが収集されていることをどのように把握できるかです。なぜなら、もしあなたがそれにアクセスすることができれば、その参照を維持していなければならないからです。その場合、それは記憶にとどまっていなければならない。

+4

あなたのアプリケーションのクラッシュによってガベージコレクションが起こっているのが見えます;-) – weismat

1

私は間違いを犯したと思います。静的変数は、アプリケーションのライフサイクル全体に存在し、アプリケーションの実行中はGCされません。

+0

基本的に私のクラスはシングルトンだったので、静的に機能しました。今私の要件は、複数のインスタンスをサポートすることです、したがって、静的はもはやオプションではありません。 – weismat

関連する問題