0

Finalize() -この関数は、ガベージ コレクション プロセス中にのみ管理されていないリソース
をクリーンアップします。このメソッドが実際にいつ実行されるかはユーザーにはわかりません。また、ユーザーはこの関数を直接呼び出してメモリをクリーンアップすることもできません。

Dispose() -
IDisposable インターフェイスを実装することにより、ユーザーは UnManaged Resources をクリーンアップでき、リソースがいつ解放されるかを正確に知ることができます。

私の理解では、Finalize() をオーバーライドしてアンマネージド リソースをクリーンアップすることはできません。
これは、管理されていないリソースのクリーンアップに使用される「GC」プロセス専用のシステム プロセスです。
ユーザーが自分でリソースをクリーンアップする必要がある場合は、IDisposable インターフェイスを実装し、Dispose() を明示的に呼び出す必要があります。他の可能性はありません!
管理されていないリソースのクリーンアップのベスト プラクティスは、'USING' ステートメントを使用することです。

質問 1: 私の理解は正しいですか? 私が間違っている場合は、上記のステートメントで私を修正してください。

質問 2: また、知りたかったのですが、 IDisposable インターフェイスを実装し、Dispose() を呼び出すことによって、マネージド リソースをクリーンアップできますか?

4

1 に答える 1

1

Finalize はメモリをクリーンアップしません。アンマネージ リソースを処理します。.NET アプリケーションでは、メモリは管理されたリソースであり、メモリの割り当てと解放はランタイムによって処理されます。特別なことをする必要はありません。オブジェクトがコレクションの対象になると、ガベージ コレクターはメモリを再利用します。

IDisposableこれは、2 番目の質問に対する答えにつながります。メモリはガベージ コレクションによって自動的に再利用されるため、メモリのクリーンアップには使用できません。IDisposableハンドルなど、GC で処理されないリソースを処理するために使用します。

于 2014-09-17T15:18:15.360 に答える