コントロールコンストラクターでいくつかのペンとブラシを作成するユーザーコントロールがあり、それらをビットマップでの描画に使用します。.Net Compact Framework を使用していますGraphics
。私のビットマップは毎回作成され、毎秒ペンが作成されます。驚くべきことに、同じ色のペンが3つある場合は、作成されるだけです。Pens
Green, Red and Blue
100 ms
20
2
Pens
100 ms
Pens
1
Pen
サンプルコード:
public MyTestControl()
{
InitializeComponent();
_barBrush = new SolidBrush(Color.Red);
_func1Pen = new Pen(Color.Red);
_func2Pen = new Pen(Color.Blue);
_func3Pen = new Pen(Color.Green);
}
protected override void OnPaint(PaintEventArgs e)
{
if (_bmpScreen == null)
{
_bmpScreen = new Bitmap(ClientRectangle.Width, ClientRectangle.Height);
_gBmp = Graphics.FromImage(_bmpScreen);
}
_gBmp.Clear(Color.White);
DoDrawings();
//
e.Graphics.DrawImage(_bmpScreen, 0, 0);
}
private void DoDrawings()
{
if (Data == null) return;
switch (Data.Length)
{
case 1:
DrawGraph(Data[0].Where(val => val != Config.NO_DATA_VALUE).ToArray(), _func1Pen);
break;
case 2:
DrawGraph(Data[0].Where(val => val != Config.NO_DATA_VALUE).ToArray(), _func1Pen);
DrawGraph(Data[1].Where(val => val != Config.NO_DATA_VALUE).ToArray(), _func2Pen);
break;
case 3:
DrawGraph(Data[2].Where(val => val != Config.NO_DATA_VALUE).ToArray(), _func1Pen);
DrawGraph(Data[0].Where(val => val != Config.NO_DATA_VALUE).ToArray(), _func2Pen);
DrawGraph(Data[1].Where(val => val != Config.NO_DATA_VALUE).ToArray(), _func3Pen);
break;
default:
break;
}
}
private void DrawGraph(int[] data, Pen pen)
{
if (data == null) return;
Point[] newPoints = GetDataPoints(data);
DrawLines(newPoints, pen, _gBmp);
}
private void DrawLines(Point[] newPoints, Pen functionPen, Graphics g)
{
g.DrawLines(functionPen, newPoints);
}
注: 私は使用して.Net Compact Framework 3.5
おり、私のリフレッシュ レートは100 ms
私が使用して.Net Compact Framework Remote Performance Monitor
い20 Pens
ます。second
Number of Pens Created increases by 20 every second
2 Pens
ビットマップを更新するたびに作成する原因は何ですか?