2009-06-15 469 views
0

誰能更快?爲什麼?C#代碼優化

1:

Point point = new Point(25,25); //any numbers.. 
Point point2 = new Point(20,95); //any numbers.. 

Graphics g = CreateGraphics(); 
g.DrawLine(point,point2); 

OR

2:

Graphics g = CreateGraphics(); 
g.DrawLine(new Point(25,25),new Point(20,95)); 
+2

sugest你使用基準System.Diagnostics.StopWatch。問題對於更廣泛的受衆沒有價值或沒有價值... – 2009-06-15 00:41:53

+1

我認爲問題是有效的,不明白爲什麼downvotes! – 2009-06-15 00:41:55

+3

這個問題是有效的,但毫無意義。它最好是微型優化,最好是最好。 – Eric 2009-06-15 00:43:06

回答

4

都不是,存在除了在可讀性(特別是JIT編譯後)損失它們之間沒有真正的區別。

0

2可能會更快,因爲您沒有在將對象傳遞給g.DrawLine之前創建對象的中間指針;然而,如果這是唯一使用point和point2的地方,那麼編譯器可能會進行優化,因此二進制文件無論如何都是一樣的。

15

沒有一個,因爲這兩個片段將編譯爲相同的MSIL代碼表示。

此外,這是一個微型優化,你應該避免在實際知道是瓶頸之前應該避免的。

2

無論是速度更快,最快的將是避免了渲染路徑完全分配這些點和precreates他們一個較早

0

這一切都取決於你在做什麼。

如果你幾乎沒有別的事情(我懷疑),那麼這就是「瓶頸」。

如果是這樣的「瓶頸」,那麼你仍然不知道什麼是顯性:

  • 兩個「新」 S和相關的構造函數,析構函數和垃圾收集。

  • 實際渲染線條。

第二個可能是不可避免的,但第一個只是出於風格的原因。

你可以通過配置文件或this simple method找到。

或者你可以避開與整個問題:

g.DrawLine(25,25,20,95);