TextBoxに長い文字列を設定するとかたまる

よく見ると最後の記事は去年か。

ちょっとハマったのでメモ。環境はVisualStudio2008でC#

TextBoxをデフォルトのままで使用し、超長い文字列(100kBのバイナリデータを0x**形式で並べたものだから400kBくらい)を設定すると、かなり長い時間返ってこなくなる。

元々はマルチスレッドで、通信スレッドからのログをInvokeで投げたりしていたので、デッドロック?と思って調べていた。

とりあえず、TextBoxにはデフォルトでは32767バイト(文字?)の設定上限がある。
ただし、MaxLengthプロパティでこれは変更可能。(ゼロにすると2Gくらい扱える。詳しくはグーグル先生に聞いて欲しい。)
また、TextBox.AppendTextでも同じサイズまでしか扱えない。こちらは上記のMaxLengthプロパティ関係無いっぽい。

で、問題はそんなところではなく、ワードラップが有効になっていたことの様だった。

TextBoxはMultiLineを有効、縦スクロールバー有効にした状態で使っていたのだが、
ワードラップ有効だと、その処理に時間を食うらしい。
試しにワードラップを切ると、とたんに問題はほぼ解消された。

実際にはワードラップオフでも上記くらいに長いと、勝手に改行は入るっぽいのだが、それですら重いらしいので、
設定する文字列を頭80バイトに制限してやると、問題は完全に解消された。

久しぶりにいろいろ調べる羽目になったなあ・・・。