ライブラリ性能改善中2

NNDDのライブラリもっさり具合改善中第2弾。

実現方式

新方式1

すべての管理済み動画をオンメモリ・線形に保持し、要求されたフォルダに存在する動画を探索する。

  • 利点:従来通り動画一覧を一つメモリ上に保持すれば良い。
  • 欠点:探索時間が動画数に比例するため、全動画数に対するフォルダ数が少ない場合性能が劣化する場合がある。
新方式2

管理済み動画を、ファイルパスをkey、動画の一覧をvalueとして連想配列で管理し、要求されたフォルダのファイルパスをkeyに動画の一覧を取得する。

  • 利点:探索時間がフォルダ数に比例し、かつ、連想配列を使って保持するため、性能劣化が少ない。
  • 欠点:従来通りの動画一覧とは別に、ファイルパス-動画一覧の連想配列をメモリ上に保持する必要がある。

実測

前回のブログとほぼ同じ環境でテストしました。

方式 かかった時間 探索対象項目数 表示対象項目
新方式1 130ms 750ムービー 248ムービー
新方式2 129ms 17フォルダ 241ムービー

新方式2でも新方式1と同程度の性能を実現できています。

それぞれの方式の処理時間の内訳
方式 探索 ソート GUI情報構築 合計
新方式1 10ms 16ms 104ms 130ms
新方式2 0.1ms未満 18ms 111ms 129ms

管理対象動画数(およびフォルダ数)が増えても探索にかかる時間はほぼ一定であることが見込めるため*1、新方式2での性能劣化が考えられる10,000動画、100フォルダのケースでも従来方式より高速な応答時間(100ms台)が期待できると考えられます。

追伸

土曜日から日曜日にマシンのリカバリをしたので、上記性能改善の確認で週末が終わってしまいました・・・。また来週!

*1:フォルダ数が異常に多い場合に連想配列の性能劣化が見られる可能性があるが、それでもおそらく線形に探索するよりは早いと考えられる。