【发布时间】:2015-08-04 14:13:24
【问题描述】:
我正在尝试优化将大量小文件创建到 SSD 磁盘的性能。
ConcurrentBag<string[]> cb = new ConcurrentBag<string[]>();
cb.AsParallel().ForAll(fa => File.WriteAllText(fa[0], fa[1]));
ConcurrentBag<string[]> 的总计数 = 80048,cb.Sum(gbc => Encoding.UTF8.GetByteCount( gbc[1] ) ); 返回 393441217 字节。
我在其他地方创建了一个 xml.Save();,它创建了一个 ~750MB 的文件。
第一种情况需要 3 分 30 秒才能完成。第二个20秒。
我知道处理所有单独的写入操作需要一些开销,但 3 分 30 秒似乎仍然有点长。我已经尝试过使用 forall 进行并行化,这很有帮助(在此之前需要 6-8 分钟才能完成)。我可以在代码中添加哪些其他修改来优化批量文件创建的性能?
【问题讨论】:
-
你可以从线程并发写入磁盘,但它是在单个流中写入磁盘的,所以我在写这个问题时没有意识到这一点
标签: c# parallel.foreach solid-state-drive writealltext