我注意到我的程序泄漏了内存。所以我使用dotMemory来查找泄漏,看起来这是导致泄漏的函数:
private void LoadBits()
{
// Lock the bitmap's bits.
Rectangle rect = new Rectangle(0, 0, bm.Width, bm.Height);
bmpData = bm.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bm.PixelFormat);
stride = bmpData.Stride;
// Get the address of the first line.
IntPtr ptr = bmpData.Scan0;
// Declare an array to hold the bytes of the bitmap.
byteCount = Math.Abs(bmpData.Stride) * bm.Height;
bytes = new byte[byteCount];
// Copy the RGB values into the array.
System.Runtime.InteropServices.Marshal.Copy(ptr, bytes, 0, byteCount);
}
这就是我解锁的方法。
private void SaveBits()
{
// Update Stuff
IntPtr ptr = bmpData.Scan0;
System.Runtime.InteropServices.Marshal.Copy(bytes, 0, ptr, byteCount);
bm.UnlockBits(bmpData);
}
我为这个类实现了IDisposable接口。我在那里调用SaveBits,所以即使我忘记调用SaveBits,GC也应该为我做。 是的,我调用bm.Dispose()并在Dispose方法中将所有内容设置为null。
答案 0 :(得分:2)
您完成后需要UnlockBits()
。