2017年7月25日火曜日

C#:画像ファイルをいろいろ扱っていたらOutofMemoryエラー出る場合の対処法

100ページ超のマルチページTiffファイルを解析するプログラムを稼働させているとメモリ使用量がどんどん上がっていき、4つほどファイルを読んだらメモリオーバーで落ちてしまうという減少に随分前から悩まされてきました。その解決策がようやく判明。
GC.Collect();
GC.WaitForPendingFinalizers();  
GC.Collect();
というように、ガーベージコレクションを発動させるだけでなく、赤字の処理を追記したほうがいいらしいです。GC.Collect()で挟むと良いようです。いままでGC.Collect()しか記述してなかったです。ググると既知のTIPSのようですね。

プログラムでは、OpenCVSharpを使ったりしているので、そのあたりのバグかな~とか思ったりもしましたが違いましたね。おかげで、メモリ使用量が全く増えることなく稼働できています。

2017年7月18日火曜日

Python:マルチページTIFFを読み込んで1ページずつ処理する

PythonでマルチページTIFFを処理する方法。OpenCVでは未対応なようなので、PILを利用する。注意点は、
  • マルチページのページ数は n_frames で取得できる
というところ。ネットのサンプルはEOFエラーまでループを回すとか気持ち悪いことしてるので、n_frames +1 までループを回すのが美しいでしょう。

下記のコードを参照。