【发布时间】:2014-12-04 03:47:14
【问题描述】:
我一直在研究,发现了 Parallel.For 的东西,但我不知道如何在没有某种错误的情况下对其进行编码。
我不断遇到的一个错误是,有多个处理器试图访问同一个文件。
我目前的代码是顺序的,但需要很长时间。我的文本文件是 10GB。
这是我的顺序部分,我所有的并行尝试都失败了
for (int i = 0; i <= 10; i++)
{
Console.WriteLine("Parsing List: " + i);
min_chunk += chunk;
max_chunk += chunk;
if (max_chunk >= lines)
{
max_chunk = lines - 1;
}
if (i == 0)
{
min_chunk = 0;
max_chunk = chunk;
}
int diff = (int)(max_chunk - min_chunk);
splitFile("sort.txt", min_chunk, max_chunk, i);
}
public static void splitFile(string path, int min, int max, int threadnum)
{
string outFileName = String.Concat("list", threadnum, ".txt");
System.IO.StreamWriter outfile = new System.IO.StreamWriter(outFileName);
for (int currline = min; currline < max; currline++)
{
string line = File.ReadLines("sort.txt").Skip(currline).Take(1).First();
outfile.WriteLine(line);
}
outfile.Close();
}
}
【问题讨论】:
-
我建议您发布现有代码,我们可以帮助您解决问题所在。
-
我想你会发现this answer 很有趣。尤其是关于没有得到任何速度提升的部分,因为您受 IO 限制。
-
你应该对代码做一些度量。您很可能会发现您正在以磁盘驱动器的 ~max 传输速率读取文件。
标签: c# multithreading parallel-processing parallel.foreach