我有一个应用程序,我需要将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上运行与mono运行时相同的程序时,内存会长大而永远不会被释放。
我尝试升级单声道版本,但结果相同。
这是完整的测试代码
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,但仍然会出现内存泄漏