我目前的代码是:
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的每个核心 让它更快?
答案 0 :(得分:5)
如果要将多个图像转换为字节数组并且事先了解它们,则可以使用Parallel.ForEach循环并在此处完成此操作,以便可以在不同的核心中完成它们(如果可用)。但我不认为修改这种使用多核的单一方法是值得的,并且可以随时节省。
答案 1 :(得分:1)
多线程无法做到这一点。这样做可能会损坏流。 必须将图像保存到流的偏移量为零。如果在保存图像之前已将任何其他数据写入流中,则流中的图像数据将被破坏。
答案 2 :(得分:-1)
我不知道如何让它使用多个内核,但为了使其成为线程安全,您需要执行以下操作。首先声明一个私有静态对象
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;
}
}