1

重複の可能性:
Dispose が必要になるのはいつですか?
メモリが残っていない場合、GC によって .Net および Bitmap が自動的に破棄されない

一連の髪の毛を引っ張った後、犯人がサイズ変更操作で Bitmap オブジェクトを再割り当てしていたことが最終的にわかりました。再割り当てが十分に行われた後、システムはビットマップの描画を停止し (Paint イベントは呼び出されませんでした)、非常にぎくしゃくした状態になりました。

新しいビットマップを割り当てる前に古いビットマップを破棄すると、修正されました。

これは、それらの古いビットマップを孤立させることによって使い果たされている (単にメモリを超えた) 基礎となるリソースが存在する必要があることを示しています。

ビットマップは、ガベージ コレクターに残せる単なるメモリの塊だと思っていました。どうしたの??

4

1 に答える 1

4

MSDN は、Bitmap が GDI+ オブジェクトをカプセル化すると述べています。そのため、不要になったシステム リソースを解放するには、Dispose() を呼び出す必要があると思います。

編集: Bitmap は Image のサブクラスであり、次の MSDN ステートメントが適用されます

Image への最後の参照を解放する前に、必ず Dispose を呼び出してください。そうしないと、使用しているリソースは、ガベージ コレクターが Image オブジェクトの Finalize メソッドを呼び出すまで解放されません。

于 2012-09-26T05:25:17.613 に答える