繁体   English   中英

C#如何使用MemoryStream进行多线程处理

[英]C# How to use MemoryStream with multithreading

我目前的代码是:

public static byte[] ImageToByte(Image img)
{

        byte[] byteArray = new byte[0];
        using (MemoryStream stream = new MemoryStream())
        {
            img.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
            stream.Close();
            byteArray = stream.ToArray();
        }


        return byteArray;
}

有没有办法让这个工作与多线程,或使用我的CPU的每个核心,使其更快?

如果要将多个图像转换为字节数组并且事先了解它们,则可以使用Parallel.ForEach循环并在此处完成此操作,以便可以在不同的核心中完成它们(如果可用)。 但我不认为修改这种使用多核的单一方法是值得的,并且可以节省任何时间。

多线程是不可能的。 这样做可能会损坏流。 必须将图像保存到流的偏移量为零。 如果在保存图像之前已将任何其他数据写入流中,则流中的图像数据将被破坏。

MSDN

我不知道如何使它使用多个内核,但为了使其成为线程安全,您需要执行以下操作。 首先声明一个私有静态对象

private static readonly Object _obj = new Object();

然后修改您的代码如下:

public static byte[] ImageToByte(Image img)
{
    lock(_obj)
    {
        byte[] byteArray = new byte[0];
        using (MemoryStream stream = new MemoryStream())
        {
            img.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
            stream.Close();
            byteArray = stream.ToArray();
        }

        return byteArray;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM