New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
タグジャンプ高速化 #803
Comments
@7-rate さん、Issue立てありがとうございます。 |
なんかしらの方法でドキュメント全体を舐める必要がある気がしていますが、可能な限りフルスキャンの回数は少なくしたいです。 ドキュメント内の検索開始位置候補を正規表現でピックアップするとか、入り口を絞る方法も考えられるかな、と。 wfdに一致する単語は、単語の先頭がwです。 |
前置き berryzplusさん、前半の話がよく分かりません。 後半についてですが、tagsファイルのキーはソートされている前提ですので正規表現で検索よりは二分探索の方が速いのでは?と思っています。 |
@7-rate さん
ドキュメントは編集ウインドウで開いているファイルデータを指しています。 てっきり、tagsの中身は初回に一括で読み込んで、ジャンプ要求のときにジャンプ先を探すためにメモリサーチしてるんだと思っていました。マップ使ってないのかぁ・・・。(注:コードは見てないです。 tagsファイルを行単位で読み込むのが遅い、という話だとは思ってなかったです。
tagsファイルを勘違いしてたようです。 ただ、こういうときこそ |
berryzplusさん、こちらこそ改めましてはじめまして。
初回起動時にtagsファイルを解析してキーワード+出現位置(群)をmap等で持っていれば確実に高速化できるでしょうが、それは難しいです。 ・tagsファイルのサイズが巨大なとき、それがそのままメモリ使用量となる 上記の懸念があるため、キーワード+出現位置(群)をmap等で持っておくのは厳しいと思っています。 |
う~む。色々ありますねぇ。 ちらっと思ったこと: あとぼんやりですが、tagsファイル読込の非同期化はなんとかしたほうが良さそうに思いました。 |
実際に実験していないので速くなるか分かりませんがメモリマップトファイルを使うのはどうだろうか?と教えて頂いた |
sqliteなどのデータベースを使う案はいいかもしれませんね。 beruさん、ご意見ありがとうございます。 |
vimでもtagsファイルを二分探索でキー探索しているようです。 |
データベースをバックエンドにしたら、検索を高速化するコードを自作しなくてもイケるかな?って感想なので、tagsファイルは何も変わらんです。将来的にやってみたい実装ですが、とりあえず普通に二分探索がいいのかな?と思ってます。 メモリマップトファイルは、ファイルデータを仮想メモリに割り当てる技術です。必要な時に必要な部分だけコミット(=実メモリに割り当て)する使い方が出来ます。GBオーダーの巨大ファイルを扱う方策として何度か話題に上がってました。 tagsに応用した場合、二度目以降のアクセスの高速化に役立つのかな?と思います、マップを突っ込んで退避しとくってのもあるかな。 |
要望機能
tagsファイルを検索するタグジャンプが遅いです。
これを高速化したいです。
具体的な現象
tagsファイルのキーがソートされている前提で、
sakura_core以下ディレクトリでtagsで最も上に登録されるキー(ADDTAIL_INTERVAL_MILLISEC)と
最も下に登録されるキー(wfd)を比較した結果、私の環境では
のようになり、顕著に差が出ます。これがさらに大きなtagsファイルだと秒単位で時間がかかってしまいます。
原因
CDlgTagJumpList::find_key_core()にてキーにマッチするデータ抽出を行っているが、
tagsファイルからキーワードの抽出の処理にて上から1ラインずつなめているため。
対策案
対策案1
tagsファイルがソートされている場合は2分探索でキーの検索を行うようにする。
対策案2
マルチスレッドで検索を行う。
対策案3
ほかに何かあればご意見ください。
開発はゆっくりにはなりますが対策案1を検討中です。
The text was updated successfully, but these errors were encountered: