C# 在C语言中,访问控件的高度、宽度属性的速度较慢#
在.NETCompactFramework中绘制一些形状时,我发现了一些令人惊讶的结果 Method1和Method2绘制了一些矩形,但Method1比Method2快,下面是代码: 方法1:C# 在C语言中,访问控件的高度、宽度属性的速度较慢#,c#,performance,compact-framework,C#,Performance,Compact Framework,在.NETCompactFramework中绘制一些形状时,我发现了一些令人惊讶的结果 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; barR
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);
}
int height=高度;
for(int i=0;i
方法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);
}
for(int i=0;i
两者之间的唯一区别在于Method1
我将控件的高度
存储在局部变量中
有人能解释一下.Net Compact Framework中绘图的原因和一些指导原则吗?方法2速度较慢,因为您在for循环的每次迭代中都要访问Height属性。此属性可能会导致一些耗时的计算,将其放入循环外部的局部变量中会起到缓存的作用。方法2速度较慢,因为您在for循环的每次迭代中都要访问Height属性。此属性可能会导致一些耗时的计算,将其放入循环外部的局部变量中会起到缓存的作用。我认为这是因为您访问了
高度-数据。长度数次。在第一种方法中,你只初始化它一次。我认为这是因为你访问了高度
-数据。长度
很多次。在第一种方法中,只需初始化一次。调用C#中的属性比直接访问内存中的变量具有更多的相关成本;因为属性是作为方法生成的,在后台有一个支持字段(和/或更糟的是..它可能会查询其他内容!)
如果您的应用程序确实是单线程的,并且您有能力缓存它,那么就这样做。避免紧循环中的属性。调用C#中的属性比直接访问内存中的变量具有更多的相关成本;因为属性是作为方法生成的,在后台有一个支持字段(和/或更糟的是..它可能会查询其他内容!)
如果您的应用程序确实是单线程的,并且您有能力缓存它,那么就这样做。避免紧循环中的属性