-
Notifications
You must be signed in to change notification settings - Fork 162
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
特定のファイルで描画が遅くなる。 #398
Comments
ちなみにメモ帳ではサクッと開ける。 |
なんとなく、utf-7を判定しにいって重くなってそうな気配を感じました。 https://ja.wikipedia.org/wiki/UTF-7 ためしに重い方にBOMを付けて保存してみたけど、あまり変わらず・・・w 逆の発想で、軽いほうに 「じゃあこれだっ!」とばかりに URL周りの判定はかなり重そうなので気にはなっていました。 |
2.3.0.0 は NG ファイルを普通に扱えました。 この間に berryzplus さんの言うところと関係する変更があったのでしょうか。 |
前に動いていたのなら git bisect しましょう。 |
なんと!昔から遅かったと思っていました。 実は、コードチェックはまだあんまりしてないのです。 |
はい。以前はそれを手作業でやっていたらしいことと合わせて、コマンドは聞いたことがあります。しかしなにぶんローカルビルド環境が……。OS の入手から……。 代わりに Very Sleepy で何をやっているかを見てみました。 sakura/sakura_core/parse/CWordParse.cpp Lines 458 to 468 in 8fb936b
ということはこれですか>「Chg: メールアドレスの記号類を許可する · sakura-editor/sakura@f6990fd」 # Very Sleepy 以降の流れには検証が必要です。 |
誰もが工藤新一にはなれんです。小五郎さんでもいいじゃないですか。 が、関数の仕様として正しい変更であるようにもぼくには見えています。 前にどっかでも同じようなことを書きました。 この変更により関数の実行速度が落ちることに修正した人が気付かなかったとは考えにくいので、「呼出ルートの確認漏れ」という人為的ミスによる不具合の可能性が出てきたと思っています。 お互いにレビューし合ってミスを減らせる環境があったなら防げたものなのかも知れません。 うーむ。 |
vs2017のプロファイラで確認してみました。 テスト内容
※前提として sakura.exe の管理プロセスが起動した状態にして実験しました。 テスト結果
時間の掛かってるもの上位3件です。 検証実験として以下のようにコードを書き換えてビルドすると // || NULL != wcschr(L"!#$%&'*+-/=?^_`{|}~", pszBuf[j])
|| (pszBuf[j] == L'!')
|| (pszBuf[j] == L'#')
|| (pszBuf[j] == L'$')
|| (pszBuf[j] == L'%')
|| (pszBuf[j] == L'&')
|| (pszBuf[j] == L'\'')
|| (pszBuf[j] == L'*')
|| (pszBuf[j] == L'+')
|| (pszBuf[j] == L'-')
|| (pszBuf[j] == L'/')
|| (pszBuf[j] == L'=')
|| (pszBuf[j] == L'?')
|| (pszBuf[j] == L'^')
|| (pszBuf[j] == L'_')
|| (pszBuf[j] == L'`')
|| (pszBuf[j] == L'{')
|| (pszBuf[j] == L'|')
|| (pszBuf[j] == L'}')
|| (pszBuf[j] == L'~') しかし、さすがにこれは汚くね?と思うコードなのでPRするのはやや微妙。 本質的には初回レイアウト処理を見直したほうがよいと思ってるのでここだけ直すのはやや微妙。 ただ、この修正だけで許容できる速度を取り戻せることを確認してしまったので直さないのも微妙。 う~む。 |
運用に耐えるようにすることは、綺麗なコードを書くよりも優先する事かと。 |
この pszBuf[j] に対する判定を全て、一つのswitch で判定するようにしたら更に速くなりませんか? sakura/sakura_core/parse/CWordParse.cpp Lines 458 to 468 in 8fb936b
|
制限して良ければ長さ制限をかけた方が効果的でした(もちろん wcschr の置き換えと併用すればさらに効果があるでしょう)。テキストの長さとマシンの速さに依存しないところがメリットです。 |
速くなると思います。 詳細忘れましたが、分岐数と被判定値の下限&上限が一定の条件を満たせば、 ところで、 @ds14050 さんの提示コードを見て思ったんですが、 メールアドレス::= コードでは「 |
インライン関数を作成してその中に閉じ込めてしまえばあまり気にならないと思います。 |
なんか歴史的な理由で、RFC非準拠のメールアドレスを使っている人がいるようなので、
|
付加機能の例外対応のためにテキスト編集の実用性を犠牲にするのは本末転倒気味なので、長さ制限は入れたいです。 |
某OSを作ってる会社が作ったメーラーと、そのメールサーバーがRFCをことごとく無視していた昔があったような古の記憶が・・・ |
ちな、Gmailだと、 けんち@サクラエディタ.jp なんてアドレスでも送れちゃうので、いっそ mailto:〜@〜.〜 [空白] でも私は困らない(笑) |
土日使ってPR作ってみます。 |
こちらでも f972a2f で用意していただいた testNG23000.txt を開いて再現しました。ひー重い…。 |
#421 を Merge して問題が解消したので Close します。 |
2万強の改行無しファイルで、やたら描画が遅くなる場合がある。
大丈夫な方。
testOK23000.txt
ダメな方。
testNG23000.txt
The text was updated successfully, but these errors were encountered: