使用Image.Save(Stream,ImageFormat)时内存泄漏

时间:2017-12-13 09:20:08

标签: c# memory-leaks bitmap mono

我有一个应用程序,我需要将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,但仍然会出现内存泄漏

0 个答案:

没有答案