ライセンス プロジェクト (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 と同じタイプのコンテナを作成しますmVController
Resolve
mVController = null
GC が不要になったときに入れたら、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)
ます。オブジェクトが不要になり、スコープ外になる必要がある場合は?
ありがとう