私は Visual Studio 2008、.NET C# 2.0 ~ 3.5、および Windows Forms を頻繁に使用していますが、GDI+ ではコントロールの描画が非常に遅いことに気付きました。私は画像 (JPG、GIF など) をあまり扱っていないことに注意してください。画像は、特定の場所のアイコンとしてのみ使用されます。これは実際には描画が遅いコントロール/フォーム/その他です。
問題は、コントロールが描画されているのを確認でき、一見簡単に見えるコントロールのセットが描画されるまでに数秒かかる場合があることです。つまり、その遅れと恐ろしい。
いくつかのラベル (40 ~ 50) をフォームに配置し、F5 キーを押して実行し、それらが描画されるのを待つ必要があるテストを行いました。繰り返しますが、ラグがあり、あまり良い経験ではありません。
したがって、この問題に対処する可能性のある WPF がありますが、私/私たちは WPF に移行する準備ができていません。そのため、回避策や修正を探していて、Direct2D に出くわし、他のライブラリを読んでいるときに見つけました。
私は少し困惑しているので、これらの質問をしてください:
1) まず、私が欲しいのは、GDI+ をより高速でハードウェア アクセラレーションされたアプローチに置き換えるための、かなりきちんとしたシンプルな方法です。WPF に移行せず、すべての Windows フォーム コードを書き直さなくても、それを行うことは可能ですか?
Direct2D で何かを読むときはいつでも、描画用のコードを手動で記述する方法を教えてくれる、通常はひどい C++ コードの長いブロックが表示されます。私はそれを望んでいません。
2) ネットで読んでいるときに、SlimDX に出くわしましたが、使い方がわかりません (書いている時点ではあまり試していません)。既に GUI アプリケーション (Windows フォーム、標準 C# コード) を持っているとしましょう。
私の問題は、既に作成した Windows Forms ソフトウェアで SlimDX、Direct2D、またはその他の類似のものを使用できるかどうか、また可能であればその方法を教えてくれる例やそのようなものが見つからないことです。
あいまいすぎないことを願っています=)
==編集== 2010-09-22
私は実際のアプリでいくつかのテストを行い、これに遅いものの1つを分離しました:
UserControl の一部のラベルにテキストを追加すると、テキストに合わせてコントロールのサイズが変更されます。たとえば、含まれている GroupControl は、ラベルの .Text プロパティに追加されたばかりのテキストのサイズに少し適応します。
約 10 個のラベル コントロールがあります。ラベルが初めて更新されてサイズが変更されると、プロセス全体に約 500 ミリ秒かかります。ラベルが 2 回目に更新され、サイズが変更されない場合、約 0 ミリ秒かかります。
==編集2== 2010-09-22
スローダウンの 1 つを見つけました。次に、文字列を Text-property に追加すると、追加されるテキストの文字列の長さが更新前のテキストと異なる場合、処理が遅くなります。
DevExpress ライブラリを使用しており、LabelControls を AutoSizeMode に設定できます。これを「なし」に設定すると、前のテキストとは長さが異なるテキストを追加するときにラグがなくなります。この問題は、AutoSize = true/false 設定もある通常の Label コントロールでも同じであると思います。
ただし、これは「回避策」ですが、それでも私の主張を証明しています。サイズ変更時に非常に遅く、かなり不自由です。