我有一个文件的数组正在对它们执行写操作,我正在使用Parallel.ForEach
循环来加速。Parallel.ForEach更改行为与多个线程
问题是,当我有多个线程时,它的行为不正常。该程序将10万个随机字节写入WAV文件,这会导致静态约1.3秒的时间。现在发生的情况是,在多个线程中,绝大多数文件中都没有静态,Windows表示文件已经更改,但音频内容没有更改,另一个问题是某些片段大约有6分钟静态写到它,这是不可能的,代码只写入每个文件2500000字节(〜10.3秒),所以由于某种原因,它的字节写入错误的文件,所以有些没有静态,其他人有一个荒谬的数额。它不可能错过静态,所以它不可能是我。我知道有什么地方出了问题。
在我多线程程序之前一切正常,所以我用MaxDegreeofParallelism = 1
,一切正常,所以我知道问题是由多个线程引起的。
Parallel.ForEach(files, new ParallelOptions{MaxDegreeOfParallelism = 4}, file =>
{
Random rand = new Random();
using (stream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite))
{
FileInfo info = new FileInfo(file);
for (int i = 0; i < 10; i++)
{
int pos = rand.Next(5000000, Convert.ToInt32(info.Length));
for (int x = 0; x < 250000; x++)
{
byte number = array[rand.Next(array.Length)];
stream.Seek(pos, SeekOrigin.Begin);
pos += 4;
stream.WriteByte(number);
}
}
}
});
编辑:另一个问题是,与多线程将其写入到所述报头部分,其中包含所述关键数据,所以没有媒体播放器识别该格式。这只发生在多线程中,而我忽略了前500万字节,我知道这足够了。
编辑:2更新的代码。
任何人都可以阐明它是关于多线程导致我的代码无法正常工作?
@spender是不是他在每次迭代递增POS 4? – Adam 2012-08-13 02:00:37
...是的,我的不好。不理我。 – spender 2012-08-13 02:01:04
您实际上没有显示Parallel.ForEach()位。 – 2012-08-13 02:01:40