2

ベスト プラクティスまたはコード効率を知るために、次のコードを使用しています。

注意: 私は .Net Compact Framework を使用しています。

protected override void OnPaint(PaintEventArgs e)
{
    if (BmpScreen == null)
    {
      BmpScreen = new Bitmap(ClientRectangle.Width, ClientRectangle.Height);
    }

    using (Graphics gBmpScreen = Graphics.FromImage(BmpScreen))
    {
         // some drawing using gBmpScreen
    }
    // finally
    e.Graphics.DrawImage(BmpScreen, 0, 0);
}

メソッドのこのコードでは、 毎回オブジェクトPaintを作成しています。Graphics

私の質問は、このようにする方が良いですか、それとも最初に一度だけグラフィックスオブジェクトを作成する方が良いですか?

4

1 に答える 1

0

パフォーマンスの違いはよくわかりませんが、OnResize でバック バッファーの Bitmap オブジェクトと Graphics オブジェクトを割り当てて破棄することをお勧めします。ほとんどのカスタム コントロールでは、バック バッファーを更新する実際の作業を、データの変更が発生する場所のできるだけ近くで分離し、OnPaint を単純化して、バック バッファーのビットマップをシステムのグラフィックスにのみブリットできることを発見しました。ユーザーの操作に応じてデータが変更されないため、これは私が作成したカスタム グラフ コントロールではうまく機能しました。これはジェスチャー スクロール コントロールに含まれ、スクロール アニメーションが大幅に改善されました。ただし、ユーザー操作の変更に応じて Update() を呼び出してハンドラーのスコープ内で OnPaint を強制することにより、パターンを拡張してよりインタラクティブなコントロールを処理できる可能性があります。

于 2012-08-02T15:51:08.203 に答える