相关疑难解决方法(0)

如何依靠I/O大量正确地并行工作

我正在构建一个必须处理大量数据的控制台应用程序.

基本上,应用程序从数据库中获取引用.对于每个引用,解析文件的内容并进行一些更改.这些文件是HTML文件,并且该过程正在使用RegEx替换进行繁重的工作(查找引用并将它们转换为链接).然后将结果存储在文件系统中并发送到外部系统.

如果我按顺序恢复该过程:

var refs = GetReferencesFromDB(); // ~5000 Datarow returned
foreach(var ref in refs)
{
    var filePath = GetFilePath(ref); // This method looks up in a previously loaded file list
    var html = File.ReadAllText(filePath); // Read html locally, or from a network drive
    var convertedHtml = ParseHtml(html);
    File.WriteAllText(destinationFilePath); // Copy the result locally, or a network drive
    SendToWs(ref, convertedHtml);
}
Run Code Online (Sandbox Code Playgroud)

我的程序工作正常,但速度很慢.这就是为什么我想要并行化这个过程.

到现在为止,我做了一个简单的并行化添加AsParallel:

var refs = GetReferencesFromDB().AsParallel(); 
refs.ForAll(ref=>
{
    var filePath = GetFilePath(ref); 
    var html = File.ReadAllText(filePath); 
    var convertedHtml = …
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing multithreading plinq task-parallel-library

22
推荐指数
2
解决办法
9944
查看次数