3

私は最近、モバイルデバイス用の.NET Compact Frameworkを使用して記述されたコードベースの責任を引き継ぎましたが、コードがDispose()いたるところに散らばっています。

これはオンになっているようです

  • ADO.NETデータベースコマンド
  • Windowsフォーム

ガベージコレクターがメモリ管理を処理すると思いました。私は彼らがなしDispose()でもう少し長くメモリにハングアップするかもしれないことを知っています、しかしこれらの呼び出しを持つことには多くの利点または利益がありますか?コードのすっきりを汚しているようです。

4

3 に答える 3

5

Dispose()がないと、メモリ内でもう少し長くハングする可能性があることは知っていますが、これらの呼び出しを行うことには多くの利点や利点がありますか?私

それは本当にこれらの呼び出しによって が処理されているかに大きく依存します。IDisposable(必然的に)メモリを解放することではなく、リソースを解放することです。一般に、ロジックに大きなフープがなくても可能であれば、常にオブジェクトに対してDisposeを呼び出す必要があります。また、必要な場合を除いて、GCに依存してリソースをクリーンアップしないでください。

CFで実行していることを考えると、それはおそらくさらに重要です。プログラムが限られたリソースのプラットフォームを対象としている場合、それらのリソースをできるだけ早くクリーンアップすることが非常に重要です。

于 2012-10-31T21:49:31.747 に答える
2

常にではありませんが、通常、Disposeの呼び出しは、管理されていないリソースを解放することです。良い習慣として、Disposeは、Disposeが設定されているすべてのタイプに対して呼び出す必要があります。

于 2012-10-31T21:49:52.450 に答える
0

.NETはオブジェクトを呼び出しDispose()ますIDisposable...つまりGC、管理対象オブジェクトをクリーンアップするときに、オブジェクトが使用する管理対象外のリソースをクリーンアップするIDisposable呼び出しを行います。この場合、呼び出しが達成するように見える主なことは、管理対象外のより確定的な解放です。リソース(.NETは参照カウンターを使用しないため、到達不能なオブジェクトがまだ存在してメモリを使用している可能性があり、逆に、オブジェクトは引き続きアクセス可能であるために破棄される可能性があります)。Dispose()Dispose()

于 2012-10-31T22:11:51.490 に答える