Image.FromStream单声道内存泄漏

时间:2017-03-24 17:46:43

标签: memory-leaks mono

我相信我在使用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();
}

0 个答案:

没有答案