[英]fastest way to convert array to multiline string
將數組元素導出到.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.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。
“效率最高”會接受試驗和錯誤,但一個簡單的替代方法是使用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輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.