内存泄漏时使用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