C# 将数组转换为多行字符串的最快方法

C# 将数组转换为多行字符串的最快方法,c#,arrays,string,c#-4.0,export-to-csv,C#,Arrays,String,C# 4.0,Export To Csv,将数组元素导出到.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 &

将数组元素导出到.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);
int FrameWidth=640;
int FrameHeight=480;
Int16[]值;//640x480307200个元件
/*
.. 处理。。。。。。
*/
//将值导出到.csv文件
字符串string2csv=null;
对于(int y=0;y
“最有效”需要反复试验,但一个简单的选择是使用
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 string2csv=新建StringBuilder();
对于(int y=0;y
使用
+
添加字符串为新字符串分配内存,然后将两个字符串的内容复制到新内存中
StringBuilder
在内存中预先分配一个缓冲区,并向缓冲区添加字符,根据需要对其进行扩展。添加大量字符串时,内存分配和复制要少得多


这可能“足够快”。除此之外,您还需要一个合适的分析器来查看代码在哪里花费的时间最多,并攻击该部分。您的“处理…”块完全可能是瓶颈,而不是CSV输出。

一种替代方法是组合
文件.writeAllines
字符串.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.writeAllines。

一个选项是使用
StringBuilder
而不是
+
。使用字符串。Join方法@DriesVB注意
string.Join
在内部使用
StringBuilder
。不要手动操作。使用像……这样的库,你甚至不需要这样做。当他可以直接写入文件时,他正在构建一个文件内容字符串。@我不确定这是否会更有效,因为优化的目的非常重要,根据输入数组的大小(约5*307K字节)设置stringbuilder的初始容量。@Frisbee:如何?默认情况下,会缓冲文件流。如何生成所有数据,然后将其写入比在生成数据时写入更高效。是的,如果我这样做:File.writealText(“string2csv.csv”,string.Join(;”,Values));它的速度非常快:)但是excel.StringBuilder中只有一行是最快的,27毫秒,然后是Joachim的38毫秒,我的解决方案是21 496毫秒:)我非常感谢您的评论!你们都很棒!