首页 > 解决方案 > C# - write to multiple files

问题描述

I am currently using File.WriteAllLines method to create two text files from a string array in a .Net Console Application.

 string[] data = {"Apple", "Orange", "Lemon", ...};
 File.WriteAllLines("1.txt", data.OrderBy(d=>d));
 File.WriteAllLines("2.txt", data.OrderByDescending(d=>d));            

The array is huge so it takes some time to create both files. Should I create tasks to improve the performance. Example:

var t1 = Task.Factory.StartNew(() => File.WriteAllLines("1.txt", data.OrderBy(d=>d)));
var t2 = Task.Factory.StartNew(() => File.WriteAllLines("2.txt", data.OrderByDescending(d=>d));
Task.WaitAll(t1,t2);

The alternate option is to use WriteAsync method.

What is the best practice around this? Is it worth parallelising file write operation?

标签: c#.netmultithreadingfile-iotask-parallel-library

解决方案


通常,并行性不适用于 IO 资源。即使是最快的 SSD 也比任何 CPU 都慢。无论您是否生成任务,磁盘都将成为您的瓶颈。但是,你也有磁盘缓存,你有其他进程争夺你的磁盘。

你需要测试。但是,即使它在单个情况下效果更好,也不能保证它会一直这样。

在磁盘上读写时,我个人会避免产生任务。


推荐阅读