-
Notifications
You must be signed in to change notification settings - Fork 163
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
Grep処理を並列処理して高速化する #857
Comments
というissueを立てさせていただきましたが、並列化はあまり経験がなくてパッと実装できそうにはないです。何かヒントとなるような実装やライブラリ、キーワード等募集します。 また、現状の実装だと これを、以下のように直していこうと考えています。 |
仕組み的なモノは #714(非同期カウントを実装してみた) が参考になるかな?と思います。
論理コア数を上限とするスレッドプールを作って、使いまわす感じかな?と思いました。 おそらく、目下最大の課題はこんな感じの非同期処理(?)をどう扱うかだと思ってます。 /* 処理中のユーザー操作を可能にする */
if( !::BlockingHook( pcDlgCancel->GetHwnd() ) ){
goto cancel_return;
}
/* 中断ボタン押下チェック */
if( pcDlgCancel->IsCanceled() ){
goto cancel_return;
} ある程度 Windows プログラムを見たことがあるなら、 イベント駆動プログラムの流儀に従って、呼ぶ側と呼ばれる側の立場を適宜考えながら構築していくのがWindowsのプログラムですが、強制的に呼ぶ側の論理のみで組めるように工夫したのが スレッド化にあたっては、 CLSID_ProgressDialog を使って進捗ダイアログ部分を組み替えることを考えていました。 あと、たぶんサクラエディタの文字コード判定は遅いので、icu4cの文字コード判別ルーチンを使う方法を選択できるように提案しようかどうか迷っています。(どっちやねん! インターネット配布のアプリにおいて、ファイルサイズが大きいことは「悪」だと思っていますが、icu4cのライブラリサイズはめちゃめちゃ大きいのです・・・。 まとまりなくてすんません。 |
ありがとうございます。大分ゆっくりになると思いますが作っていきます。 |
高速に grep を行ってくれるソフトに ripgrep というのがあります。 で試してみたところ検索自体は 0.1 秒以下で完了しているようです。 こんな風にして確認しました。
出力された統計情報は以下のようになってました。
サクラエディタの grep 処理の速度を上げる事の価値は高いと思いますが、待つのが嫌な場合は既存のソフトを使うのも選択肢として良いと思います。 |
@berryzplus さん
個人的には Optional であれば問題ないと思います。 ICUのファイルをサクラエディタのインストーラーに含めるのはファイルサイズ的に少し抵抗感が有ります。 が 20.8 MB ぐらいなので。 設定画面で ICU4C の DLL ファイルがあるフォルダのパスを指定出来るようにして、文字コード判定を自前のでやるか ICU を使って行うかを選択出来るようにすると良いと思います。 |
ripgrepいいですね。 |
この件ですが、私の技量では少々厳しそうです。 |
要望機能
Grepが遅いです。
これを高速化したいです。
※
#467 に関連しています。
具体的な現象
スクリーンショットの設定にて
"grep"と"hogehogehoge"でベンチマークをとってみました。私の環境では以下のような結果になりました。
ちなみに秀丸エディタだとほぼ一瞬で終わります。
原因
CGrepAgentにてGrep処理を行っているが、シングルスレッドで処理しているため。
対策
#467 にあるように処理を並列化することで最近のマルチコアCPUの場合はコア数に比例して高速化できます。
スクリーンショット
設定
The text was updated successfully, but these errors were encountered: