我相信我在使用Image.FromStream调用时偶然发现了Mono 4.6和4.8中的内存泄漏。以下是可用于重现问题的代码段。我已经在Ubuntu 16.04 LTS中使用Mono 4.6和4.8进行了测试。
我在这里发布了一个Visual Studio / MonoDevelop解决方案和项目(在tar.gz文件中):BitmapTest.tar.gz。提取BitmapTest.gz后,将BitmapTest重命名为BitmapTest.tar.gz,以便提取代码。
这个项目是一个简单的Winforms应用程序,它运行下面的代码。
是否有工作,或者我没有考虑的事情?
编辑: 如果我使用
using (Bitmap srcBitmap = (Bitmap)Image.FromFile(_file_name))
而不是
using (Bitmap srcBitmap = (Bitmap)Image.FromStream(ms))
有效。问题似乎出现在Image.FromStream中。
// populate our byte[] array with a .BMP file
ImageConverter convert = new ImageConverter();
private byte[] _sourceArray = (byte[])convert.ConvertTo(Image.FromFile(filename_string), typeof(byte[]));
// put the following code in a loop
using (System.IO.MemoryStream ms = new System.IO.MemoryStream(_sourceArray))
{
System.Diagnostics.Trace.WriteLine("First memory stream created OK size: " + ms.Capacity.ToString());
using (Bitmap srcBitmap = (Bitmap)Image.FromStream(ms))
{
System.Diagnostics.Trace.WriteLine("First Bitmap created OK size: " + srcBitmap.Size.ToString());
}
}
// If GC is called then the memory climbs slower
if (_forceGC) {
GC.WaitForPendingFinalizers();
GC.Collect();
}