gpt4 book ai didi

c# - 如何提高循环效率

转载 作者:行者123 更新时间:2023-12-01 11:11:02 24 4
gpt4 key购买 nike

我正在尝试将我的数据保存到 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();
}

当每个channelRawData 计数达到20,000 时,应用程序将运行缓慢。有什么办法可以加快的生​​成速度吗?

最佳答案

您可以采取一些措施来加快速度。

通常,I/O 操作是昂贵的(最慢的),所以尽量避免做很多,而是只写一次或几次。

多次执行此操作时,修改字符串的速度也很慢。因此,您应该使用 StringBuilder。

最后,在我看来,您使用的日期时间在许多情况下(但可能不是全部!)是相同的值。如果是这种情况,那么您可以只调用一次,然后输出相同的值。

您还可以加快 channel 选择语句的速度(根据其他帖子)。

那么你就会有这样的代码:

StringBuilder sb = new StringBuilder();
string dtValue = DateTime.Now.ToString();

for (int i = 0; channels.First().RawData.Count; i++)
{
sb.Append(dtValue).Append(",").Append(channels.First().RawData[i]).Append(Environment.NewLine);
}

//Write just once.
using (var sw = new StreamWriter(FileStream, Encoding.Default))
{
sw.Writeline(sb.ToString());
sw.Close();
}

编辑:根据评论更新为使用 channels.First().RawData[i]。

关于c# - 如何提高循环效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60484697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com