2016-09-27 28 views
0

イメージファイルをpdfに変換するとき、私のメモリ使用量が4GBを超え、CPU使用率が100%であるためMagick.NETライブラリに苦労しています。変換が完了すると、すべて正常に戻ります。私はこの特定のサードパーティを1つのアプリケーションの多くのインスタンスで使用しているため、膨大なメモリ損失が発生します。Magick.NET C# - メモリの大量使用

問題がオンラインにあります。images.Write(newPdfPath);

using (MagickImageCollection images = new MagickImageCollection()) 
     { 
      images.Read(orginalImage); 

      images.Write(newPdfPath); 
     } 

画像は、異なるサイズであり、それは本当に問題も存在するサイズ7キロバイトのJPGに変換するときのように、どのように大きな問題ではありません。

助けてください!!!!

+1

画像の大きさはどれくらいですか?たぶん[this](http://stackoverflow.com/questions/34737302/memory-consumption-in-magick-net)から説明を得ることができます。 –

+0

どのように我々は少しの情報で助けることができますか? – TaW

+0

画像を処理しているコードを投稿してください。 – raven

答えて

1

cpuとメモリの割り当ては、ハードドライブ上のイメージのサイズには関係ありません。それは完全にあなたが持っているピクセルの数に関連しています。 20,000ピクセル×20,000ピクセルの完全に白いイメージがある場合、ハードドライブ上のこのファイルのサイズは6MGになる可能性がありますが、Magick.netでメモリにロードするとギガバイトになります。最初に、どのサイズ(ピクセル単位)がイメージであるかを確認してから、そのパフォーマンスについて判断する必要があります。 次に、これらの方法を使用してパフォーマンスを向上させることができます。

イメージをメモリに読み込むと、.mpc形式のHDDに書き込むことができ、メモリに非常に高速に読み込むことができます。あなたが並列ループ上でコマンドを実行できるかどう代わりQ16

使用Magikc.netのQ8(あなたは数回あなたのイメージをロードする必要がある場合)、その後Magick.netバージョン7が速く、ほぼ4倍を実行することができます。

その他の回答として、完了したら画像を破棄する必要があります。

0

イメージをループで変換し、変換後に各イメージを破棄すると役立つ可能性があります。イメージによって使用される管理されていないメモリリソースを解放するには、

Image.Dispose(); 

の方法を使用してください。

+0

'images'には廃棄は必要ありません。 'images'変数は' using'ステートメントの中で 'Dispose'を呼び出す' using'ステートメントで宣言されています。 –

+0

WillはDispose()を呼び出しますが、その時点で処分されるわけではありません。 – BrightShadow

関連する問題