C# 如何将 MemoryStream 与多线程一起使用



我当前的代码是:

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;
    }
}

最新更新