2012-07-27 57 views
2

我發現了一些令人驚奇的結果而繪製在.NET Framework精簡一些形狀。訪問高度,控制的寬度屬性是在C#較慢

方法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受圖紙的一些準則?

回答

3

方法2變慢了,因爲你在你的for循環的每個迭代訪問height屬性。該屬性可能會導致一些耗時的計算,並將其放入循環外的局部變量中充當緩存。

0

我相信那是因爲你訪問Height - 次data.Lenght amoutns。在第一種方法中,你只能使用一次。

1

在C#的性質的呼叫相關聯的多個比它直接在存儲器訪問可變成本;作爲屬性作爲背景的支持字段方法產生(和/或更糟。或許它查詢別的東西!)

如果您的應用程序確實是單線程的,你能負擔得起緩存它,這樣做。避免緊密環路中的特性。

相關問題