【发布时间】:2020-03-02 08:04:46
【问题描述】:
我正在尝试将我的数据保存到 csv 文件。当速率很小(保存 2,000/s)时,它工作得很好。但是当增加到20,000 / s时,它的工作速度很慢。
class Channel
{
List<double> RawData { get; set; }
...
}
-----------------------------------
var channels = new List<Channel>();
// after fetch the data
var sw = new StreamWriter(FileStream, Encoding.Default);
for (i = 0; channels.First().RawData.Count; i ++)
{
string line = DateTime.Now.ToString() + ",";
line += string.Join(',', channels.Select(c => c.RawData[i]));
sw.WriteLine(line);
sw.Flush();
}
当每个channel 的RawData 数量达到20,000 时,应用程序将运行缓慢。有没有办法加快line的生成速度?
【问题讨论】:
-
嗯,我建议使用 3 方库(如 CSV 助手)或至少使用一些引号或分隔符,在其他文化中不会是小数分隔符。并且不要忘记大数字可能会使用数千个分隔符
-
性能 wize ,不清楚。如果必须为每一行完成
DateTime.Now,我会建议使用计时器并像这个问题一样计算滴答声:Why are DateTime.Now DateTime.UtcNow so slow/expensive?。并避免在紧密循环中进行任何类型的字符串连接line +=,字符串构建器应该在那里更好。