我有一组文件正在对它们执行写操作,我正在使用Parallel.ForEach
循环来加快速度。
问题是当我有多个线程时,它的行为不正常。该程序向 WAV 文件写入 10 次 250000 个随机字节,这将导致大约 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 更新代码。
谁能阐明导致我的代码无法正常运行的多线程是什么?