我有一個文件的數組正在對它們執行寫操作,我正在使用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