Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C语言中,访问控件的高度、宽度属性的速度较慢#_C#_Performance_Compact Framework - Fatal编程技术网

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

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

在.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;
  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#中的属性比直接访问内存中的变量具有更多的相关成本;因为属性是作为方法生成的,在后台有一个支持字段(和/或更糟的是..它可能会查询其他内容!)

如果您的应用程序确实是单线程的,并且您有能力缓存它,那么就这样做。避免紧循环中的属性