WPF:CreateBitmapSourceFromHBitmap() 中的内存泄漏
在 WPF 应用程序中,重复使用 CreateBitmapSourceFromHBitmap()
可能会导致内存泄漏。此问题发生的原因是 CreateBitmapSourceFromHBitmap()
使用的基础 GDI 位图未正确释放。
为了解决此内存泄漏问题,必须使用 gdi32.dll
库中的 DeleteObject()
方法手动释放 GDI 位图。可以通过将 Bitmap
对象包装在 using()
语句中来实现此目的,该语句会自动调用 Dispose()
方法来释放 GDI 位图。以下是更新后的代码:
<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>
通过使用 using
语句并显式调用 DeleteObject()
,可以释放 GDI 位图并防止内存泄漏。这确保了即使重复调用也能正确释放内存。
以上是WPF:使用 CreateBitmapSourceFromHBitmap() 时如何防止内存泄漏?的详细内容。更多信息请关注PHP中文网其他相关文章!