0

いくつかのフォームが非常に複雑な winforms アプリケーションがあります。データセット、グリッドとコンボボックスを使用した複数のバインディングを使用しています。私はusingすべてのステートメントを使用しIDisposableForms も)、すべてのバインディングをクリアし、Dispose() 内でイベントのサブスクライブを解除しようとしましたが、何も変わりませんでした。フォームを破棄した後に呼び出すとGC.Collect()、フォームを開く前と同じように、使用済みメモリ量が以前の状態に戻ります。いくつかのメモリ プロファイラを試しましたが、異常はありませんでした。

4

3 に答える 3

1

私の雇用主である Red Gate Software は、問題の調査に使用できる .NET メモリ プロファイリング ツールを作成しています。無料でリークを見つけるのに十分な長さの14日間の試用版があります:)

http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/

私は試していませんが、jetBRAINS の「dotTrace Memory」もあります。

于 2013-06-19T11:57:42.270 に答える
1

DataSet処分しても正しく解除されない場合があります。MSDNから

注: DataSet ではファイナライザーが抑制されているため、DataSet から継承されたクラスはガベージ コレクターによってファイナライズされません。派生クラスは、そのコンストラクターでReRegisterForFinalizeメソッドを呼び出して、クラスがガベージ コレクターによってファイナライズされるようにすることができます。

そして、非常に役立つこの質問を読む必要があります.Should I Dispose() DataSet and DataTable?

于 2013-06-19T11:51:53.650 に答える