2009-05-29 1 views
1

グリッドを持つコントロールがあります。デバイスコンテキストクラスの描画線関数を使用するたびにグリッドを構成する水平線と垂直線を描画する方がコストがかかりますか、グリッドをメモリデバイスのコンテキストに1回描画してから、ウィンドウdc?ありがとう。dc-> DrawLine()のほうが安価ですか、それともblitですか?

答えて

5

これは、行数、グリッドの大きさ、ユーザーのビデオカードなど、多くの要素によって異なります。

あなたの最善の策は、それらのうちの1つを実行することです(おそらく私の腸の感覚がより単純で速いと言うDrawLineでしょう)。そして遅いマシンでそれをテストします。それが動作し、それが十分に速い場合、それを途中で最適化しないでください。

+1

+1:両方を試して結果を記録するための提案 - 優秀な回答:-) –

+0

"偉大なプログラミングの引用"の質問から: "時間の約97%という小さな効率を忘れてしまいます。諸悪の根源。" - Donald Knuth –

1

Aはこのようなコントロールを作成していて、セルを更新するときには各セルの境界線を描きました。 (別の考えです)

0

これは、使用しているペンの種類によっても異なります。単純な単色の水平および垂直ラインの場合、通常、IIRC塗りつぶし矩形が最も速いですが、独自のベンチマークを実行するのはかなり簡単です。

2

もう1つのオプション:グリッドパターンのブラシを作成し、領域はFillRect()にします。ほとんどの場合、これは私の経験から、これを行う最も速い方法です。

しかし、 "RichieHindle"は正しいです。スピードを測定するだけで事実を知ることができれば、それについての哲学は必要ありません;)。

+0

これは速いがいつもうまく動かない – GorillaApe

0

短い答え:後者。後で再ペイント操作のビットマップとして使用できるように、メモリDCに一度ブリッティングすることは、通常レンダリングの方が高速です。

0

メモリにイメージをコピーするので、ブリッティングが優先されます。画像をコピーするときは、ちらつきを防止するものとする。

関連する問題