3

Java でのメモリ リークに関する質問には回答がありましたが、.net でメモリ リークが発生する可能性はありますか?

例は何でしょうか?

4

5 に答える 5

0

.NET で最もよく見られるメモリ リークは、決してなくなることのない静的オブジェクトです。これは Singleton オブジェクトではよくあることですが、静的オブジェクトの仕組みを誤解していることから生じる間違いである可能性もあります。

メモリ リークのもう 1 つの卑劣な例は、静的イベントの登録です。たとえば、SystemEventsクラスのすべてのイベントは静的です。オブジェクトがこのイベントに自分自身を登録する場合は、自分自身を登録解除する必要があります。そうしないと、オブジェクトはガベージ コレクションされません。

SystemEvents.SessionEndingイベントをリッスンするために誰かがフォームを登録したときに、実際にそれが起こりました。これらのイベントは静的です。これらは、イベントが発生したときに呼び出されるデリゲートの静的リストを保持します。オブジェクトが破棄され、このオブジェクトへのすべての参照が null に設定されている場合でも、静的イベントはオブジェクトを保持し続けるため、オブジェクトがガベージ コレクションされることはありません。また、そのオブジェクトが保持されるため、それが参照するすべてのオブジェクトも存続します。

于 2014-10-07T16:29:39.397 に答える
0
for(int i = 0; i < 10; i++)
{
    IntPtr imageData = Marshal.AllocHGlobal(1024*1024);
}

これにより、たとえば 10 MB のメモリ リークが発生します。管理されていないものはすべてリークする可能性があり、管理されているものでメモリリークが発生したとしても、それを取得するのは困難です。

于 2013-06-29T12:13:41.237 に答える