在.Net Compact Framework中绘制某些形状时,我发现了一些令人惊讶的结果。

Method1和Method2绘制了一些矩形,但是Method1比Method2快,这是代码:

方法1:

int height = Height;
for (int i = 0; i < data.Length; i++)
{
  barYPos = Helper.GetPixelValue(Point1, Point2, data[i]);

  barRect.X = barXPos;
  barRect.Y = barYPos;
  barRect.Height = height - barYPos;
  //
  //rects.Add(barRect);
  _gBmp.FillRectangle(_barBrush, barRect);
  //
  barXPos += (WidthOfBar + DistanceBetweenBars);
}


方法2:

for (int i = 0; i < data.Length; i++)
{
  barYPos = Helper.GetPixelValue(Point1, Point2, data[i]);

  barRect.X = barXPos;
  barRect.Y = barYPos;
  barRect.Height = Height - barYPos;
  //
  //rects.Add(barRect);
  _gBmp.FillRectangle(_barBrush, barRect);
  //
  barXPos += (WidthOfBar + DistanceBetweenBars);
}


两者之间的唯一区别在于Method1我将控件的Height存储在局部变量中。

谁能解释.Net Compact Framework中绘图的原因和一些准则?

最佳答案

方法2较慢,因为在每次for循环迭代时都要访问Height属性。此属性可能会导致一些耗时的计算,并将其放在循环外部的局部变量中将充当缓存。

10-08 02:33