migemoの高速化

  • 切り替えるの面倒だよね。自動化したい。
  • 入力が500msくらい途切れたら自動でmigemo検索を実行
      • インクリメンタルじゃないけど…実用的にはこれでいいかも
  • インデックス時に日本語を含むかどうかのフラグを立てておき、立ってるものだけmigemoを使う
  • 1文字手前の検索結果から絞り込んで検索する
  • URLのタイトル名にだけ使う

全体の高速化

  • RegexOptions.Compiledを試してみる
  • 先頭・末尾に追記したときは、1回前の検索結果から絞り込む
  • 末尾の文字を消した場合は、1回前の検索結果をレストア
  • 途中に追記した場合は、結果が増えることがあるので再検索
  • もっと汎用的に、文字列 -> 検索結果のハッシュを持てばいいのか
    • ウィンドウを閉じたらClearが無難かな
  • DEBUG時は、全体から検索した場合と結果が一致するかassertしよう

設計見直し

そろそろリファクタの時期。いろいろネタ出し。

  • ソートはstatic, dynamicに分ける
    • static: インデックス作成時のソート
      • 低速でよい。ユーザー入力はヒントに使えない。
    • dynamic: 検索結果に対するソート
      • 高速でないといけない。ユーザー入力をヒントに使える。
      • staticソートの結果を無駄にしないアルゴリズムがよい。

  • staticソートアルゴリズム
    • アルファベット順
    • 最終アクセス時刻

  • dynamicソートアルゴリズム
    • ファイル名に完全一致したものは上に持ってくる
    • migemoモード時、日本語でヒットしたものは上に持ってくる

  • ビジュアライザ
    • Path, URIから、画面に表示する文字列を求めるもの
    • 画面表示されるアイテムに対してだけ呼ばれる。低速でいい。

コンフィグ

  • ダイアログの内容を丸ごとシリアライズする方法ないかな

その他

  • アイテム追加のスレッド化
    • PriorityQueueを使うと終わったころにはソート済み