jny*_*len 5 c# multithreading data-processing
我正在编写一个需要处理大型文本文件的应用程序(用逗号分隔的几种不同类型的记录 - 我没有权力或倾向更改数据存储格式)。它读入记录(通常是按顺序读取文件中的所有记录,但并非总是如此),然后将每个记录的数据传递给一些处理。
现在这部分应用程序是单线程的(读取记录,处理它,读取下一条记录等)我认为在一个线程中读取队列中的记录并在另一个线程中处理它们可能更有效线程在小块中或在它们可用时。
我不知道如何开始编写类似的程序,包括必要的数据结构或如何正确实现多线程。任何人都可以提供任何指示,或提供有关我如何提高性能的其他建议吗?
如果您能够平衡处理记录的时间和读取记录的时间,您可能会受益匪浅;在这种情况下,您可以使用生产者/消费者设置,例如同步队列和工作人员(或几个)出队和处理。我可能也想研究并行扩展;编写阅读代码的一个版本非常容易,之后(或其他方法之一)实际上应该执行您想要的所有操作;例如:IEnumerable<T>Parallel.ForEachParallel
static IEnumerable<Person> ReadPeople(string path) {
using(var reader = File.OpenText(path)) {
string line;
while((line = reader.ReadLine()) != null) {
string[] parts = line.Split(',');
yield return new Person(parts[0], int.Parse(parts[1]);
}
}
}
Run Code Online (Sandbox Code Playgroud)