另一個「不重要」的性能問題。 不重要的,因爲主要代碼可讀性比幾毫秒更重要,但無論如何有趣。 我注意到不同DateTime比較之間存在差異。爲什麼Date1.CompareTo(Date2)> 0比Date1> Date2更快?
我檢查3層的替代品:
Dim clock As New System.Diagnostics.Stopwatch
Dim t1, t2, t3 As Long
Dim Date1 As Date = Date.Now.AddSeconds(2), Date2 As Date = Date.Now
Dim isGreaterThan As Boolean
clock.Start()
For i As Int32 = 1 To 1000000000
isGreaterThan = Date1 > Date2
Next
clock.Stop()
t1 = clock.ElapsedMilliseconds
clock.Reset()
clock.Start()
For i As Int32 = 1 To 1000000000
isGreaterThan = Date.Compare(Date1, Date2) > 0
Next
clock.Stop()
t2 = clock.ElapsedMilliseconds
clock.Reset()
clock.Start()
For i As Int32 = 1 To 1000000000
isGreaterThan = Date1.CompareTo(Date2) > 0
Next
clock.Stop()
t3 = clock.ElapsedMilliseconds
結果:
- 日期1>日期2 = 13207/13251/13267/13569/13100 = 毫秒
- Date.Compare( Date1,Date2)> 0 = 13510/13194/13081/13353/13092 = ms
- Date1.CompareTo(Date2)> 0 = 11776/11768/11865/11776/11847 = 毫秒
通常我選擇第一方法,因爲它是更具有可讀性和比其他故障安全。方法3是最快的。這是編譯器在我使用運算符重載方法1時會選擇的方法嗎?如果是,爲什麼在運行時會有差異? 方法2是最慢的,也許是因爲它是共享/靜態的?! UPDATE:增加了一些更多的值。現在Metod 1和2相當快。
也許有人可以用事實來澄清它。 謝謝。
在10億次迭代中,相差不到2秒......實際上並不重要,也不重要。 – Oded 2010-08-06 10:44:36
您是否測量過多次,排除異常值並對結果進行平均? – 2010-08-06 10:45:09
無論原因如何,「緩慢」版本每秒(在您的硬件上)的* 75百萬*比較而不是* 85百萬*。除非您在某個問題的基準測試中依賴於性能的應用程序處於緊縮環境中,否則更偏好於微觀優化的可讀性。 – 2010-08-06 10:57:20