はるかに高速に多くの単一文字を描画する別の方法はありますか?
メソッドはGraphics.DrawString
GDI+ を使用して描画しますが、これは GDI よりも遅くなる傾向があります。GDI は通常、適切なグラフィックス ドライバーのセットがインストールされていることを前提として、ハードウェア アクセラレーションを使用します。これに対する唯一の例外は、Aero テーマが有効になっている Windows Vista ですが、これは Windows 7 で修正されましたTextRenderer.DrawText
。代わりに、メソッドの 1 つを呼び出して GDI に切り替えることができます。GDI+ よりも多少高速になる可能性があるだけでなく、GDI を使用する利点は他にもあります。唯一の本当の欠点は、WinForms が印刷用の GDI の使用をサポートしていないことです。しかし、それはあなたにとって懸念事項ではないようです。
それらをサポートする最新バージョンの Windows のみをターゲットにしていると仮定すると、Direct2D や DirectWrite などの新しいグラフィックス テクノロジのいくつかを調べることもできます。C# ラッパーについては、 Windows API コード パックを調べることができます(このブログ記事も参照してください)。OpenGL もオプションの場合があります。私はそれを使用したことはありませんが、スピードはその名声の1つです.
残念ながら、これが十分に速いかどうかはまだわかりません。1 秒間に 30 回の 100 万文字というのは、実に不当な量です。私が知っているビデオ出力デバイスは、これを表示することさえできません。確かに、代わりに行うことができるある種のキャッシングがあります。それとも、アプリケーションのまったく異なる設計でしょうか?
また、バックグラウンド バッファ (ビットマップなど) への描画は、ディスプレイ バッファ (モニタなど) に直接描画するよりもかなり高速であることに注意してください。したがって、すべての描画をこのバックグラウンド バッファー上で行い、それを 1 回のパスで定期的に画面にブリットすることができます。この手法は「ダブル バッファリング」と呼ばれることが多く (2 つのバッファを使用するため)、ちらつきを最小限に抑える方法としてよく知られています。また、できるだけ速く描画する必要がある場合は、表示出力の固有の制限を考慮しながら描画できるため、速度を向上させることもできます。
同じ効果を得るために、一定の間隔で文字列を描く方法があります。これはありそうにないようです。
固定間隔で描画しても、比例間隔を使用するよりも速度が向上しません。
特に重要な描画コードを作成するときに覚えておくべき「取引のコツ」がいくつかありますが、期待がどれほど高いかを考えると、これらが役に立つかどうかは真剣に疑問です。それらは、アルゴリズムを調整するためのものであり、パフォーマンスを数桁向上させるものではありません。