0

ライセンス プロジェクト (Database Interaction Project) があり、DB からデータをロードするフォームからすべての参照を削除したいと考えています。大量のデータをロードし、メモリ使用量が多いためです。アプリケーション (.Net Memory Profiler、Ants) をプロファイリングし、そのフォームに接続されている参照を取得しました。

Module1.cs / Class1 -> Module2.cs / Class2 with the reference ref 1 written on the arrow

大幅な変更を加えずにそれらを削除する必要があり、プログラムは引き続き機能するはずです:)。null への参照を配置すると、それらの参照が再び必要になる可能性があるため、プログラムがクラッシュします 問題は、表示された参照が、プロファイラーによって表示されたモジュールとは異なるモジュールで宣言される可能性があることです。

Data.cs にはDataクラスがあり、その中で宣言します

mVController = table.Resolve<ImVController>();

mVController - タイプですImVController(名前は関係ありません) table - タイプです-宣言され IUnityController ImVControllerているインターフェイスです - mVController と同じタイプのコンテナを作成しますmVControllerResolve

mVController = nullGC が不要になったときに入れたら、GC に入る / オブジェクトがコレクションの対象になるかどうかを知りたいですか?

または、tableタイプのオブジェクトへの参照を保持しますImVControllerか? 合格になると思います。

いくつかのオブジェクトが宣言されている場合:

object newObject = DomainObjectFactory.GetObject(typeOfObject);

次に、mVController を使用します。

(newObject as Class1).MethodFromClass1(mVController.Property1, mVController.Property2, ...);

次のように参照を削除しますか?

object = null;その後、特定の時間に収集されますか?

別の質問: メソッド内で ref を使用して参照を渡す必要があります (たとえばpublic void method(ref Type obj) 、オブジェクトが null になるように、メソッド内で obj = null; を作成しますか?すべてのプロジェクトからのすべての参照が null> を指し、GC が収集できるようにしますか?次に、ref: を使用してメソッドを呼び出しmethod (ref obj)ます。オブジェクトが不要になり、スコープ外になる必要がある場合は?

ありがとう

4

1 に答える 1

0

不要になったときに mVController = null を入力すると、GC が入力され、オブジェクトがコレクションの対象になりますか?

IUnityController の実装に依存します。ImVController を所有している場合、mVController をリセットしても利益はありません。とにかく、アプリのメモリが不足するまで、GC はガベージを収集しません。

obj = null を作成します。オブジェクトもnullになるようにメソッドで

オブジェクトが他の変数/オブジェクトで参照されている場合、GC はそれを収集しません。そうでない場合、あなたの異議は収集されます。しばらく。

于 2013-04-18T13:09:21.297 に答える