.NET のメモリ リークが他のリークと同じではないと人々が考えるのはなぜですか?
メモリ リークは、リソースにアタッチして解放しない場合に発生します。これは、マネージド コーディングとアンマネージド コーディングの両方で行うことができます。
.NET やその他のプログラミング ツールに関しては、ガベージ コレクションや、アプリケーションのリークを引き起こす状況を最小限に抑えるその他の方法についてのアイデアがありました。ただし、メモリ リークを防止する最善の方法は、使用しているプラットフォームでの基礎となるメモリ モデルと、それがどのように機能するかを理解する必要があることです。
GC やその他の魔法が混乱をクリーンアップすると信じることは、メモリ リークへの近道であり、後で見つけるのが難しくなります。
管理されていないコードをコーディングするときは、通常、必ずクリーンアップを行います。取得したリソースは、用務員ではなく、クリーンアップする責任があることを知っています。
一方、.NET では、多くの人が GC がすべてをクリーンアップすると考えています。まあ、それはあなたのためにいくつかのことをしますが、そうであることを確認する必要があります. .NET は多くのことをラップするため、管理されたリソースを扱っているのか管理されていないリソースを扱っているのかが常にわかるとは限らず、何を扱っているのかを確認する必要があります。フォント、GDI リソース、Active Directory、データベースなどの処理は、通常、注意する必要があるものです。
管理された用語で言えば、プロセスが強制終了/削除されると消えると言うために首をかしげます。
多くの人がこれを持っているのを見ていますが、これが終わることを本当に願っています. 混乱を一掃するためにアプリを終了するようにユーザーに依頼することはできません。IE や FF などのブラウザを見て、たとえば Google リーダーを開き、数日間放置して、何が起こるかを見てください。
次にブラウザで別のタブを開き、あるサイトにアクセスしてから、ブラウザのリークを引き起こした別のページをホストしていたタブを閉じた場合、ブラウザはメモリを解放すると思いますか? IE ではそうではありません。私のコンピューターでは、Google Reader を使用すると、IE は短時間 (約 3 ~ 4 日) で 1 GiB のメモリを簡単に消費します。一部のニュースページはさらに悪い。