在C#中访问控件的高度,宽度属性较慢

时间:2012-07-27 12:32:09

标签: c# performance compact-framework

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

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

方法一:

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 个答案:

答案 0 :(得分:1)

对C#中的属性的调用具有比直接访问内存中的变量更多的相关成本;因为属性是作为背景中具有支持字段的方法生成的(和/或更糟糕的......也许它会查询其他内容!)

如果您的应用程序确实是单线程的,并且您可以负担缓存它,请执行此操作。避免紧密循环中的属性。

答案 1 :(得分:0)

我相信这是因为您访问Height - data.Lenght次。在第一种方法中你只需要初始化一次。