将数组元素导出到.csv excel文件中的最有效方法是什么?现在我这样做,但速度很慢。感谢您的支持。
int FrameWidth = 640;
int FrameHeight = 480;
Int16[] Values; // 640 x 480, 307200 elements
/*
.. processing ......
*/
//Exporting Values to .csv file
string string2csv = null;
for (int y = 0; y < FrameHeight; y++)
{
for (int x = 0; x < FrameWidth; x++)
{
string2csv = string2csv + Values[y * FrameWidth + x] + ";";
}
string2csv = string2csv + "\n";
}
File.WriteAllText("string2csv.csv", string2csv);
答案 0 :(得分:3)
另一种方法是合并File.WriteAllLines
和string.Join
;
File.WriteAllLines ("test.txt",
Values.Select((x,i) => new {x, i})
.GroupBy(x => x.i / FrameWidth)
.Select(grp => string.Join(";", grp.Select(y => y.x)))
);
它将选择所有元素以及数组中的索引
然后,它将按行对值进行分组(通过将索引除以列数计算得出)
然后使用;
将分组的值连接到每行的字符串中,并将这些行全部输入到File.WriteAllLines中。
答案 1 :(得分:2)
“效率最高”会接受反复试验,但一个简单的选择是使用StringBuilder
:
StringBuilder string2csv = new StringBuilder();
for (int y = 0; y < FrameHeight; y++)
{
for (int x = 0; x < FrameWidth; x++)
{
string2csv.Append(Values[y * FrameWidth + x] + ";");
}
string2csv.Append("\n");
}
使用+
添加字符串为新字符串分配内存,然后将两个字符串的内容复制到新内存中。 StringBuilder
在内存中预先分配一个缓冲区,并在缓冲区中添加字符,并根据需要进行扩展。添加大量字符串时,内存分配和复制的次数要少得多。
这可能“足够快”。除此之外,您需要获得一个不错的分析器,以查看您的代码花费最多的时间并攻击该部分。您的“处理...”块完全可能是瓶颈,而不是CSV输出。