◀Unicode版開発トップへ
  • 1305 バグを報告しました。(BugReport/57)
    • 1306 Re: バグを報告しました。(BugReport/57)
  • [1305] バグを報告しました。(BugReport/57) ds14050 2010年07月06日 02:56

    BugReport/57 - SakuraEditorWiki
    <http://sakura.qp.land.to/?BugReport%2F57>
    「数ギガバイトのメモリを食い尽くして Windowsの動作を妨げます。 」

    みなさんのところでは再現できますか?
    こういうときはメモリをダンプすればすぐに犯人(※メモリのあらゆる
    ところに存在している)がわかるそうですが自分にはできません。
    Very Sleepyで CPU消費時間をみたら _DoTabや _CreateLayoutが
    目立っていました。
    • [1306] Re: バグを報告しました。(BugReport/57) もか 2010年07月06日 18:51

      報告ありがとうございます。
      再現しました。ANSI/Unicode両方です。おそらく折り返しインデントできる初期から発生するんではないかと。

      TAB_____aTAB____b
      を
      TAB_____a<(隙間ありの折り返し)|
      INDENT__←ここにTAB____を置こうとするが入らないので、0文字のレイアウト行を作成
      INDENT__←同上... となって、無限にレイアウト行を作っています。
      いちよう対策コードはあって、インデントしたあとの残りが「6」以下だと折り返しインデントしなくなります。
      しかし、行頭インデントで1行の残りが7ぐらいでタブ幅を8にすると当然入らないから、無限ループします。
      右端で折り返さなくても、ある範囲の桁数で折り返しさえすれば発動します。

      折り返しインデントをあきらめる桁数を、タブ幅+2(+2なのは未検証、保険)としておきます。
      折り返し基準の仕様を変更して、行末のタブはいつも1文字幅として計算(タブぶら下げ)してもたぶん回避できます。

      余談:
      ちなみに、タブ幅(2-64) < 折り返し幅 ぐらいで、タブ幅が強制的に4になるみたいですね。
      右端で折り返しのタブ幅16とかにしてウィンドウを細すると4になるけど、ウィンドウを広げても元に戻らない。。