なぜ私のPictureBoxは、日常リークメモリをロードするのですか?
-
21-09-2019 - |
質問
私がしてきた<のhref = "https://stackoverflow.com/questions/1565142/what-is-the-simplest-way-to-display-and-change-an-image-resource-on- A-WPF-dialo "> C ++ / CLIアプリケーションの中でのPictureBoxにスワップイメージしようとしているが、私の解決策は、メモリリークを持っているように見えます。
System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
// Pick a new bitmap
static int resource = IDB_BITMAP1;
if( resource == IDB_BITMAP2)
{
resource = IDB_BITMAP1;
}
else
{
resource = IDB_BITMAP2;
}
// Get the primary module
Module^ mod = Assembly::GetExecutingAssembly()->GetModules()[0];
// Get the instance handle
IntPtr hinst = Marshal::GetHINSTANCE(mod);
// Get the bitmap as unmanaged
HANDLE hbi = LoadImage((HINSTANCE) hinst.ToPointer(),MAKEINTRESOURCE(resource),IMAGE_BITMAP,0,0,LR_DEFAULTCOLOR);
// Import the unmanaged bitmap into the managed side
Bitmap^ bi = Bitmap::FromHbitmap(IntPtr(hbi));
// Remove any previously stored images
if(m_pictureBox1->Image != nullptr)
{
delete m_pictureBox1->Image;
m_pictureBox1->Image = nullptr;
}
// Insert the bitmap into the picture box
m_pictureBox1->Image = bi;
// Free up the unmanaged bitmap
DeleteObject(hbi);
}
メモリ内〜24kの増加を毎回タスクマネージャのレポートをして、なぜボタンがクリックされたので、私の知る限り見ることができるように、私は明示的にメモリを解放してる?
解決
二つの言葉:ガベージコレクション
他のヒント
奇妙な話ですが、これは実際にするときにボタンのマウスオーバー発生することになりそうです。メモリは、メモリ使用量が安定することをジャンプしますが、十分なマウスオーバー後のことをあなたがするたびに。ボタン上の実際のクリック(私のルーチンへの呼び出しがすなわち)漏れが発生することはありません。
所属していません StackOverflow