質問

私がしてきた<の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の増加を毎回タスクマネージャのレポートをして、なぜボタンがクリックされたので、私の知る限り見ることができるように、私は明示的にメモリを解放してる?

役に立ちましたか?

解決

二つの言葉:ガベージコレクション

他のヒント

奇妙な話ですが、これは実際にするときにボタンのマウスオーバー発生することになりそうです。メモリは、メモリ使用量が安定することをジャンプしますが、十分なマウスオーバー後のことをあなたがするたびに。ボタン上の実際のクリック(私のルーチンへの呼び出しがすなわち)漏れが発生することはありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top