ExtTextOut の最大描画可能文字数と描画速度について

この記事は約2分で読めます。

自作エディタの文字の描画は Win32Api の ExtTextOutW を利用しています。先日1行が 32 万文字を表示させると、描画されないことがあったので、ExtTextOutW の描画文字数を超えているのでは?っと思い調べてみました。

結論から言うと ExtTextOutW で描画できる最大文字数は 65,535 文字でした。確認した環境は Windows10(64bit) です。

文字の描画方法

自作エディタは行単位に描画していますが、タブや空文字などの区切り文字やキーワードが存在しない場合は、一度に描画する仕様にしています。

例えば以下のような 1 行が 65,003 文字あって、65,000 文字から表示する場合、見えない範囲から 65,003 文字を一度に描画しています。

これは等幅フォントなら 65,000 文字から表示すれば良いのですがプロポーショナルフォントの場合、文字幅で次に描画する文字や位置が変わるためにこの仕様にしました。ただ、やっぱりちょっと無理しすぎ感がありますね…。

最大文字数を超えるとどうなるのか?

最大文字数の 65,535 文字の場合は描画されます。

最大文字数を超える 65,536 文字の場合はエラーになるため、何も描画されません。

対応策

区切り文字やキーワードなどが存在しない長い行の場合、 65,000 文字単位に描画するようにしました。

描画速度

次に気になったのが、描画の速度です。1 回で 1 文字描画するのと最大の 65,535 文字描画した場合でどれぐらい処理時間に差が出るのか自作エディタで検証してみました。

結果

5回計測した平均(秒)です。やっぱり描画する文字数が多い方が遅くなる結果になりました。

1文字の場合

0.0000088秒

65,535文字の場合

0.0058812秒

おわりに

画面に描画する範囲が決まっているのであれば、最小の文字を描画した方が良いですね。無茶しすぎました…。今後の課題として対応を考えます。

コメント

タイトルとURLをコピーしました