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

本文关键字:方法 字符串 数组 转换 | 更新日期: 2023-09-27 18:33:52

数组元素导出到.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);

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

一种选择是将File.WriteAllLinesstring.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中。

"

最有效的"会反复试验,但一个简单的替代方法是使用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 输出。