Heim >Backend-Entwicklung >C++ >WPF: Wie verhindert man Speicherlecks bei der Verwendung von CreateBitmapSourceFromHBitmap()?

WPF: Wie verhindert man Speicherlecks bei der Verwendung von CreateBitmapSourceFromHBitmap()?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-10 10:26:40340Durchsuche

WPF: How to Prevent Memory Leaks When Using CreateBitmapSourceFromHBitmap()?

WPF: Speicherverlust in CreateBitmapSourceFromHBitmap()

In WPF-Anwendungen kann die wiederholte Verwendung von CreateBitmapSourceFromHBitmap() zu Speicherverlusten führen. Dieses Problem tritt auf, weil die zugrunde liegende GDI-Bitmap, die von CreateBitmapSourceFromHBitmap() verwendet wird, nicht korrekt freigegeben wird.

Um dieses Speicherleck zu beheben, muss die GDI-Bitmap manuell mithilfe der gdi32.dll-Methode in der DeleteObject()-Bibliothek freigegeben werden. Sie können dies erreichen, indem Sie das Bitmap-Objekt in eine using()-Anweisung einschließen, die automatisch die Dispose()-Methode aufruft, um die GDI-Bitmap freizugeben. Hier ist der aktualisierte Code:

<code class="language-csharp">using System.Runtime.InteropServices;

...

using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(1000, 1000))
{
    IntPtr hBitmap = bmp.GetHbitmap();

    try
    {
        var source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
    }
    finally
    {
        DeleteObject(hBitmap);
    }
}</code>

Sie können eine GDI-Bitmap freigeben und Speicherlecks verhindern, indem Sie die using-Anweisung verwenden und DeleteObject() explizit aufrufen. Dadurch wird sichergestellt, dass der Speicher auch bei wiederholten Aufrufen korrekt freigegeben wird.

Das obige ist der detaillierte Inhalt vonWPF: Wie verhindert man Speicherlecks bei der Verwendung von CreateBitmapSourceFromHBitmap()?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn