アウトラインが原因でMeryがフリーズします

  1. 特定の文字列なのか、理由は分かりませんがフリーズします
    アウトラインを無効にしていればMeryはフリーズしません
    アウトラインを有効にしていても、該当箇所を折りたたんでおけばフリーズしません
    これ以上の条件特定は出来ませんでした
    再現するための文字列やアウトラインの設定は、どのように送ればよろしいでしょうか

    Windows10 64bit
    Mery 64bit 3.3.7

     |  かずら  |  返信
  2. ご報告ありがとうございます。

    > 再現するための文字列やアウトラインの設定は、どのように送ればよろしいでしょうか

    内容に差し支えなければこのフォーラムに内容を記載していただいても大丈夫です。

    文書のサイズが大きい場合や、Mery.ini をお送りいただける場合などは info@haijin-boys.com 宛に添付ファイルとして送っていただけると助かります。

    GMail だと添付ファイルの拡張子ではじかれてしまうことがあるようなので、その場合は拡張子を変更して添付してみてください。

    ※メールでご連絡をいただいた場合、問題が解決しましたらメールアドレスは削除させていただきますのでご了承ください。

    よろしくお願いいたします。

     |  Kuro  |  返信
  3. > 文書のサイズが大きい場合や、Mery.ini をお送りいただける場合などは info@haijin-boys.com 宛に添付ファイルとして送っていただけると助かります。

    メールさせていただきました
    よろしくお願いします

     |  かずら  |  返信
  4. ご連絡ありがとうございます。無事、データを受信できました。

    早速、いただいた条件のとおり検証してみたのですが、私の環境ですとフリーズは発生しませんでした。

    クリーンな Ver 3.3.7 のポータブル版に Mery.ini と、関連プラグイン (クラスビュー、半角/全角変換、スニペット、プロ生ちゃん) を導入した環境です。

    マクロは見た感じですとイベント駆動は設定されていないようなので、恐らく関係ないと思います。

    環境に依存する可能性があるので、以下の点について上から順にご確認いただけますでしょうか。

    ひとつずつ設定をご確認いただき、変更しても改善が見られない場合は元に戻してください。

    (1) Mery のオプションで DirectWrite をオフにしてみてください

    Mery を最大化しているとフリーズするとのことなので、グラフィックカードのドライバーなどが関係している可能性があります。

    オフにしても改善されない場合は設定は元に戻してかまいません。オフにして改善された場合は、グラフィックカードのドライバーを最新のものにアップデートしてみてください。

    (2) Windows の IME を以前のバージョンに設定してみてください

    以下の [回避策] の手順に従い、IME を以前のバージョンに設定してみてください。
    https://support.microsoft.com/ja-jp/topic/kb4564002-%E4%B8%80%E9%83%A8%E3%81%AE-microsoft-im-%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E5%A0%B4%E5%90%88-windows-10-%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3-20h2-%E3%81%8A%E3%82%88%E3%81%B3-windows-10-%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3-2004-%E3%81%A7%E5%95%8F%E9%A1%8C%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%99%E3%82%8B%E5%8F%AF%E8%83%BD%E6%80%A7%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99-63696506-47d2-9997-0b72-41a68e328692

    以前のバージョンの IME に設定しても改善されない場合は設定は元に戻してかまいません。

    上記の 2 点が怪しいところです。

    以下は可能性は低いですが、上記の手順で改善されない場合はご確認ください。

    (3) ウイルスチェックソフトで Mery.exe を除外設定してみてください

    ウイルスチェックソフトにより動作が妨げられている可能性が考えられます。

    (4) Mery のオプションで [鬼車を使用する] をオンにしてみてください。

    正規表現に問題がある場合、フリーズが発生することがあります。以前に鬼雲におけるフリーズのご報告がありましたので、鬼車を使用することで改善されるかもしれません。

    (5) その他、常駐アプリとの競合の可能性など

    思い当たる点は以上ですが、常駐アプリや、最近、パソコンにインストールしたアプリ。OS のアップデートなど、お気づきの点がありましたら情報をいただけると調査の糸口になるかもしれませんのでよろしくお願いいたします。

     |  Kuro  |  返信
  5. > (1) Mery のオプションで DirectWrite をオフにしてみてください
    改善しませんでした
    DDUで余計なグラフィックドライバーを削除してもみましたが、改善しませんでした

    > (2) Windows の IME を以前のバージョンに設定してみてください
    ATOKを使用しています
    IMEに変えてみましたが、改善しませんでした

    > (3) ウイルスチェックソフトで Mery.exe を除外設定してみてください
    ウイルスチェックソフトはなにも入れていません

    > (4) Mery のオプションで [鬼車を使用する] をオンにしてみてください。
    改善しませんでした

    > (5) その他、常駐アプリとの競合の可能性など
    セーフモードで試したところ、フリーズしませんでした
    IMEでもATOKでもセーフモードならフリーズしませんでした
    その後、タスクマネージャーからスタートアップを全て無効にして確認しましたが、フリーズしました

    新しく判明したことがあります
    マルチスクリーン(3画面)環境なのですが、特定のディスプレイで最大化したときだけフリーズします
    こうなると再現がかなり難しいと思います
    一応配置や構成を書きます

    使用PCはSurface por8(WindowsTablet)です
    ディスプレイの並び
    2-3-1
    1がSurface(2880x1920 200%)で2と3がサブモニター(1920x1080 100%)です
    3がメインディスプレイになっています
    1と2で最大化したときはフリーズしません
    3で最大化したときだけフリーズします

    1をメインディスプレイにしてみても、1と2で最大化したときはフリーズしません
    3で最大化したときだけフリーズします

    セーフモードでフリーズしなかったのもそれが理由でしょう

    また分かったことがあったら報告します

     |  かずら  |  返信
  6. ご確認ありがとうございます。

    私のほうでもディスプレイを 3 台接続して同様の設定にて検証してみたのですがフリーズは発生しませんでした。

    ディスプレイ 3 でのみフリーズが発生するとのことなので環境依存の可能性が考えられます。

    お手数をおかけしますが、以下の点をご確認いただけますでしょうか。

    (1) PC の再起動

    [シャットダウン] ではなく、[再起動] してみてください。(Windows 10 のシャットダウンはゴミが残るため)

    (2) Mery 側の DirectWrite オフと、プロ生ちゃんプラグインもオフ

    プロ生ちゃんプラグインも DirectWrite を使用していました。どちらも DirectWrite をオフにしてご確認ください。

    (3) グラフィックカードのドライバーの更新

    Surface Pro をお使いとのことなので Intel グラフィックスのドライバーの不具合が報じられています。

    以前に Intel グラフィックスのドライバーの不具合で Mery がクラッシュするというご報告があり、ドライバーの更新で解決したことがありました。

    【参考】https://www.haijin-boys.com/discussions/6556

    上記の件は Intel UHD グラフィックスでしたが、Surface Pro 8 は Intel Iris Xe グラフィックスになっているようですね。

    別のアプリになりますが、Intel Iris Xe グラフィックスでフリーズするという問い合わせがあるようなので、以下の手順に従ってドライバーを最新のものに更新してみていただけますでしょうか。

    https://knowledge.autodesk.com/ja/support/autocad/troubleshooting/caas/sfdcarticles/sfdcarticles/JPN/AutoCAD-crashing-with-Intel-Iris-Xe-graphics.html

    また、他のアプリにおいても多数、Intel Iris Xe グラフィックスでフリーズが報告されているようです。

    【事例 1】
    https://www.intel.co.jp/content/www/jp/ja/support/articles/000058900/graphics.html

    【事例 2】
    https://www.intel.co.jp/content/www/jp/ja/support/articles/000059957/graphics.html

     |  Kuro  |  返信
  7. 色々と調べていただいてありがとうございます

    > (1) PC の再起動
    何度もしていますが、変化ありません

    > (2) Mery 側の DirectWrite オフと、プロ生ちゃんプラグインもオフ
    DirectWrite オフ、プロ生ちゃんアンインストールをしましたが、変化ありません

    > (3) グラフィックカードのドライバーの更新
    更新しましたが、変化ありません

    今回分かったことがあります
    Surface pro8のモニターの拡大縮小とレイアウトの推奨値が200%になっています
    これを100%にするとフリーズしませんでした
    これが125%でも150%でフリーズします
    つまり100%以外に設定するとフリーズするようです
    Surface pro8の解像度を1920x1080にしても、100%以外にするとフリーズします
    解像度は関係ない模様
    倍率が関係していたようです

     |  かずら  |  返信
  8. ご確認ありがとうございます。

    うーん、謎ですね。私のほうでも 3 台のディスプレイでメインを 200% にしたりサブを 200% にしたりいくつかの組み合わせを検証しましたが、プロ生ちゃんプラグインは表示がバグるものの、アウトラインによるフリーズは発生しませんでした。

    しかしながら、Windows の拡大縮小の設定 (スケール) は非常に複雑で、メインのスケール、サブのスケールの組み合わせ、さらには設定後に再起動したかどうかによっても大きく動作が異なります。

    > 1がSurface(2880x1920 200%)で2と3がサブモニター(1920x1080 100%)です
    > 3がメインディスプレイになっています

    ここが分からなくて、2 と 3 がサブで、3 がメインとのことですが、1 がメインの間違いでしょうか?

    つきましては、以下の点について正確な情報をいただけますと手掛かりになるかもしれません。

    ※ 前提として、再起動したあとに設定値を確認してください。再起動しないとシステム DPI が更新されないので Mery の動作も違ってきます。

    (1) メインディスプレイのスケール

    → [これをメインディスプレイにする] にチェックが入っているディスプレイの [拡大縮小とレイアウト] の%表示の部分です。再起動することにより、これがシステム DPI に設定されます。

    (2) サブ 1 とサブ 2 ディスプレイのスケール

    → [これをメインディスプレイにする] にチェックが入っているディスプレイ以外のディスプレイの [拡大縮小とレイアウト] の%表示の部分です。

    (3) 問題が発生するディスプレイ

    → メイン、サブ 1 、サブ 2 のディスプレイのうち、問題の発生するディスプレイはどれですか?

    それと、Mery を起動したときに最初に Mery のウィンドウが表示されたディスプレイも教えてください。(起動時のディスプレイの DPI を計算に使っているため)

    これらの情報をいただけると同じ設定で確認できるはずなので、よろしくお願いいたします。

    それから、プラグインやマクロなどの外部的な要因を排除できると原因を絞りやすくなるので、お時間がありましたら Mery のポータブル版をダウンロードしていただき、Mery.exe と同じフォルダーに Mery.ini だけコピーして現象が発生するかどうかご確認いただけると助かります。(このとき、普段使ってる Mery が常駐していたら終了しておいてください)

     |  Kuro  |  返信
  9. > > 1がSurface(2880x1920 200%)で2と3がサブモニター(1920x1080 100%)です
    > > 3がメインディスプレイになっています
    > ここが分からなくて、2 と 3 がサブで、3 がメインとのことですが、1 がメインの間違いでしょうか?

    設定-ディスプレイ-マルチディスプレイ
    のところです
    3のディスプレイで「これをメインディスプレイにする」にチェックを入れています

    > (1) メインディスプレイのスケール
    ディスプレイ番号1
    Surface pro8のスケールは200%です

    > (2) サブ 1 とサブ 2 ディスプレイのスケール
    ディスプレイ番号2と3
    追加しているディスプレイのスケールは両方とも100%です

    > → [これをメインディスプレイにする] にチェックが入っているディスプレイ以外のディスプレイの [拡大縮小とレイアウト] の%表示の部分です。
    「これをメインディスプレイにする」にチェックが入っているのは3番のディスプレイです

    > (3) 問題が発生するディスプレイ
    3番のディスプレイです
    「これをメインディスプレイにする」のチェックが3番のディスプレイに対して入っている・いないにかかわらず、3番のディスプレイで問題が発生します

    Meryのポータブル版を利用しています
    Mery 3.3.7を解凍し、[Outline\青空文庫]と[Mode\青空文庫]だけをコピーして設定を有効にしたもので試しました
    結果として、もう一つ分かったことがありました
    上記クリーン環境でもoutlineの表示位置が右だとフリーズします
    左・上・下だとフリーズしませんでした

     |  かずら  |  返信
  10. ご返信ありがとうございます。

    いただいた情報をもとに検証しましたところ、発動条件は若干異なりますが現象を再現できたようです。

    私の環境ですと、テキストを編集したときにフリーズするのではなく、アウトラインツリーの上にマウスを乗せたときにフリーズしました。

    発生条件も絞れました。

    (1) Mery が表示されているディスプレイの右隣にスケールの異なるディスプレイが配置されていること。

    メインかサブかは関係なくて、100% と 200% のようにスケールの異なるディスプレイが Mery の表示されているディスプレイの右隣にあることが条件です。

    (2) アウトラインを右側に表示していること。

    (3) アウトラインの項目がそこそこ長い文字列であること。

    マウスをのせたときに表示されるツールチップが右隣のディスプレイに半分以上はみ出すぐらいの文字列です。

    (4) ツリービューの上にマウスをのせること。

    これでフリーズします。

    原因を調査しましたところ、Mery 以外のアプリでも Windows のツリービューを使用しているものだとフリーズするようです。

    Windows のエクスプローラーの左側にもツリービューが付いているので試してみたら、同条件でフリーズしました。

    【参考】エクスプローラーのツリービューのフリーズとその発生条件
    https://imgur.com/a/cJG8q4v

    どうやら Windows 10 のバグのようですが、以下は原因の考察です。

    Windows 10 ではスケールの異なるディスプレイが混在できるようになっており、ウィンドウの半分以上が別のディスプレイに侵入した時点でスケーリングが発動します。

    ツールチップもウィンドウなので、恐らくツールチップに対してもスケーリングが発動しようとしてクラッシュしているのではないかと思います。

    ツリービューのツールチップは OS が勝手に表示しているものなので、このバグについてはマイクロソフト側での修正してもらう必要があります。

    Mery 側でできそうな対策としては、スケールの異なるディスプレイが混在している場合はツールチップを無効化するぐらいしかなさそうです。

    つきましては上記の対策を組み込んだアウトラインプラグインを作ってみたので、これで問題が改善されているかどうかご確認いただけますでしょうか。

    ---
    アウトライン プラグイン Ver 3.2.0 (64 ビット版) [801,261 バイト 2022/07/12]
    https://www.haijin-boys.com/download/Outline-x64-3.2.0.zip
    ウイルスチェック: https://www.virustotal.com/#/file/fd774551e11dedb4fc1c3eba28865dfff2cdc48497535d6a1fd5a5902182121e
    ---

    ※アウトラインプラグインの起動時にディスプレイのチェックをしているので、Windows 側でディスプレイのスケールを変更した場合はアウトラインプラグイン (または Mery) を再起動する必要があります。

    よろしくお願いします。

     |  Kuro  |  返信
  11. > (3) アウトラインの項目がそこそこ長い文字列であること。
    逆に更に長いとフリーズしないっていうのも謎ですね

    > つきましては上記の対策を組み込んだアウトラインプラグインを作ってみたので、これで問題が改善されているかどうかご確認いただけますでしょうか。
    改善されました
    対応ありがとうございます

     |  かずら  |  返信
  12. ご確認と検証のご協力ありがとうございました。

    改善されたとのことで安心しました。Mery の次のバージョンは対策済みのアウトラインプラグインを同梱するようにしておきますね。

    > 逆に更に長いとフリーズしないっていうのも謎ですね

    これも Windows のバグによるものです。

    従来から Windows のバグによりツールチップが 80 文字を超えるとクラッシュするという問題があったので、その回避策として 80 文字を超える場合は独自の処理を割り込ませているため、たまたま今回の件を回避できていたようです。

    【参考】TTreeView crashes with over 80 characters in label
    https://groups.google.com/g/borland.public.cppbuilder.vcl/c/XbDoAzTEsic/m/8PuyVlHrTHwJ

    つまり「そこそこ長い文字列」というのは、右隣のディスプレイにツールチップの枠が半分以上、侵入するけど文字数は 80 文字未満という条件になりますね。

    ちなみに今回の問題についても同様の回避方法は検証してみましたが、スケーリングには対応できないようで、フリーズこそしないもののツールチップの文字だけスケーリングされて大きくなり、ツールチップの枠は小さいままで文字が見切れてしまう、という中途半端な仕様だったため採用しませんでした。

    本件の Windows のバグにつきましては、そのうちマイクロソフトにフィードバックしておこうと思います。

     |  Kuro  |  返信
スポンサーリンク