我在.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中解释图纸的原因和一些指导原则吗?
答案 0 :(得分:1)
对C#中的属性的调用具有比直接访问内存中的变量更多的相关成本;因为属性是作为背景中具有支持字段的方法生成的(和/或更糟糕的......也许它会查询其他内容!)
如果您的应用程序确实是单线程的,并且您可以负担缓存它,请执行此操作。避免紧密循环中的属性。
答案 1 :(得分:0)
我相信这是因为您访问Height
- data.Lenght
次。在第一种方法中你只需要初始化一次。