2017年2月25日土曜日

Picmvr 0.74 を公開した / MTP/PTPを使ったファイル列挙が恐ろしく遅いデジタルカメラの問題

0.72からの変更点は以下の通り
  • 転送終了後の処理としてファイルを読み取り専用化できるようにした(設定メニュー)
  • MTP/PTPを用いたファイル名列挙が非常に遅いデジタルカメラ機種があった。これに対処するため転送除外フォルダの設定をできるようにした(設定メニュー)。
  • MTP/PTPポータブルデバイスの名前が取得できないスマートフォン機種があったので修正した。
  • 読み取り専用ファイルに対する上書き処理はこれまでエラー扱いだったが、スキップ扱いに改めた。
  • MTP/PTPポータブルデバイスのコピー履歴によるスキップ処理において、小文字が含まれているファイル名に限り、正しくスキップされないことがあったので修正した。
  • UI調整

MTP/PTPを使った転送処理で、ファイルの列挙がとても遅い機種があった。具体的には手持ちのニコンとソニーのあるカメラだ。あまりにも遅いので苦肉の策としてver.0.73において転送除外フォルダ設定をできるようにした。

ここで不思議なのはファイル列挙は遅いがファイル転送は遅くないことである。

それらのカメラのファイル列挙はWindowsのエクスプローラーでも遅かった(ファイルが徐々に現れるさまが目視できるくらい遅い)。だからPicmvrのコード・アルゴリズムのせいではなさそうだ。
また、手持ちのiPhoneやAndroidスマートフォンのMTP/PTPによるファイル列挙はとても高速に動作した。だから、プロトコルとしてのMTP/PTP自体の問題ではない。
ということは、それらのカメラのMTP/PTPファイルの列挙する処理の何かが重いように見える。