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

标签 c# performance compact-framework

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

方法1和方法2绘制了一些矩形,但方法1比方法2更快,代码如下:

方法一:

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 属性。这个属性可能会导致一些耗时的计算,将其放在循环外的局部变量中充当缓存。

关于c# - 在 C# 中访问控件的高度、宽度属性较慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11687820/

相关文章:

c# - 衡量函数执行时间的最佳方法是什么?

c# - StringBuilder 中最快的搜索方法

.net - 如何获取正在执行的 .exe 的名称?

java - 如果没有在代码中修改,我应该声明一个 java 字段 'final' 吗?

visual-studio - 如何用 C# 模拟/调试 Windows CE 5.0 应用程序?

c# - 使用 InternetGetConnectedState 检查互联网连接始终为真

c# - WPF C# 数据绑定(bind)到 DataGridTextColumn

c# - 动态表达返回类型Lambda表达式

c# - 如何使用 IEnumerable<> 类型创建 CodeFunction2?

c# - 如何阻止设计者用空值填充我的属性?