内存泄漏时使用Image.Save(流,ImageFormat)
我有一个应用程序,我需要将RGB位图数据压缩为JPEG格式的字节数组。 所以我使用Image.Save(Stream stream, ImageFormat foramt)
保存到MemoryStream
,然后转换为byte[]
using(MemoryStream ms = new MemoryStream())
using(Bitmap bmp = new Bitmap(640, 480, PixelFormat.Format24bppRgb)) {
bmp.Save(ms, SaveFormat);
}
在Windows 7上使用.NetFramework 4.0时代码很好,但是当我在Ubuntu上运行与单声道运行时相同的程序时,内存会增长并永远不会释放。
我试过升级单声道版本,但得到相同的结果。
这是完整的测试代码
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Threading;
class Program {
private static ImageFormat SaveFormat = ImageFormat.Jpeg;
static void Main(string[] args) {
bool isStopped = false;
Thread t = new Thread(() => {
while(!isStopped) {
using(MemoryStream ms = new MemoryStream())
using(Bitmap bmp = new Bitmap(640, 480, PixelFormat.Format24bppRgb)) {
bmp.Save(ms, SaveFormat);
}
}
});
t.Start();
Console.ReadLine();
isStopped = true;
t.Join();
Console.WriteLine("Stop");
}
}
和单声道版本。
user@Ubuntu:~$ mono --version
Mono JIT compiler version 5.4.1.6 (tarball Wed Nov 8 20:37:08 UTC 2017)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-
project.com
TLS: __thread
SIGSEGV: altstack
Notifications: epoll
Architecture: amd64
Disabled: none
Misc: softdebug
LLVM: supported, not enabled.
GC: sgen (concurrent by default)
我想知道是否有任何替代解决方案将位图转换为jpeg格式的字节数组? 或者如何避免单声道运行时的内存泄漏
编辑:我试过有或没有GC,仍然有内存泄漏
链接地址: http://www.djcxy.com/p/84153.html上一篇: Memory leak when using Image.Save(Stream, ImageFormat)
下一篇: DotNet Core image antialias using libgdiplus on Mac OS X