2017-11-08 15 views
3

イメージコンバーターに書き込む。それぞれを並列に使うと、すべての画像が保存されるわけではありません。ディスクにファイルを書き込むには処理が速すぎますか?ここで各ループのパラレルですべてのファイルが保存されない

は私のコードです:

private void convert() 
{ 
    Parallel.ForEach(source.GetFiles("*.tif"), 
     new ParallelOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount }, 
     file => 
     {     
      fileName = file.Name; 
      MagickImage image = new MagickImage(sourceFolderPath + "\\" + file); 
      image.ColorSpace = ColorSpace.XYZ; 
      image.GammaCorrect(2.4); 
      image.Write(destinationFolderPath + "\\" + fileName); 
     }); 
} 

は私が間違って何をしたのですか?

+0

は、ソースから宛先パスにFile.Copyを行うときに、あなたが代わりにMagickImageを使用しての同じを参照していますか? –

+0

それは処理が速すぎる、それは他のもののホストになる可能性があります、デバッグのビットは、ファイル名が処理されようとしたことを記録するのに役立つはずです。そしてそれはエラーなしで書かれなければなりません。 – BugFinder

+0

File.Copyを使用すると、ファイルがあて先フォルダにすべて存在するというエラーが表示されます(ただし、実行前は空です)。だから、私はループがファイルtiwceを取ると思いますか? –

答えて

3

imageを配置してみてください。

private void convert() 
{ 
    Parallel.ForEach(source.GetFiles("*.tif"), 
     new ParallelOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount }, 
     file => 
     {     
      fileName = file.Name; 
      using (MagickImage image = new MagickImage(sourceFolderPath + "\\" + file)) 
      { 
       image.ColorSpace = ColorSpace.XYZ; 
       image.GammaCorrect(2.4); 
       image.Write(destinationFolderPath + "\\" + fileName); 
      } 
     }); 
} 
+0

['MagickImage'クラス](https://github.com/dlemstra/Magick.NET/blob/master/Source/Magick.NET/Framework/MagickImage.cs#L42)は' IDisposable'を実装していません。 –

+0

真。 CodePlex上でこの[古いドキュメント](https://magick.codeplex.com/wikipage?title=Convert%20image)が 'using'で見つかりました。 –

+0

一方、「_ Magic_mageクラス」(https://github.com/dlemstra/Magick.NET/blob/master/Source/Magick.NET/Native/MagickImage.cs#L31)に_does_ 'IDisposable'を実装してください。よくわかりません。 –

関連する問題