我有一个包含图像数据的非常大的双打数组,所有值都在0到255之间。
为了使用BitmapSource.Create(),我需要一个字节数组。所以我使用以下方法转换所有数据:
byte[] bytedata = doublearray.Select(X => Convert.ToByte(X)).ToArray();
但我发现这种方法很慢,并且耗尽了我所有的处理器时间。
是否有人建议以最快的方式从double数组中提取数据并将其传递给字节数组?
[编辑]这是我正在寻找的表演,而不仅仅是转换。我还需要废弃多余的空字节,所以:
static byte[] GetBytes(double[] values)
{
return values.SelectMany(value => BitConverter.GetBytes(value)).ToArray();
}
不起作用
答案 0 :(得分:1)
除了显然用任何输出为你工作替代MessageBox之外,没有什么可说的。在我的系统上,在发布和调试中,循环解决方案快了大约10倍。编辑:请注意,此代码可能不安全。如果您对源数据有任何疑问,可以随时loopData[i] = (byte) ((int)doubleData[i] & 0xFF);
。
using System.Diagnostics;
double[] doubleData = new double[500000];
byte[] loopData;
byte[] convertData;
//linq approach
Stopwatch sw = Stopwatch.StartNew();
convertData = doubleData.Select(o => Convert.ToByte(o)).ToArray();
MessageBox.Show(sw.ElapsedMilliseconds.ToString());
//loop approach
sw = Stopwatch.StartNew();
loopData = new byte[doubleData.Length];
for (int i = 0; i<doubleData.Length; ++i)
{
loopData[i] = (byte)(doubleData[i]);
}
MessageBox.Show(sw.ElapsedMilliseconds.ToString());