我在C#中創建了一個流行的Winforms程序,它有很多GUI小部件,並發現當平臺目標爲x64時,啓動速度比86。在x64目標下,啓動大約需要5秒鐘,這對用戶體驗有負面影響。我想讓它更快。啓動Winforms程序相對於x86在x64下速度要慢10倍以上
我也試過用我的另一個程序,還發現在x64下的啓動時間是x86的兩倍或三倍。
所以我開始想知道是什麼導致了它。我的程序使用了很多小部件,爲了測試理論,我決定用800個按鈕創建一個測試項目!我將它們全部設置爲Visible=False
,以便重新繪製/刷新速度不會混淆水域。
令我吃驚的是,在64開始了很多比86相當於慢。然後我開始計時InitializeComponent();
部分,果然,x64版本運行時間約爲3.5秒。另一方面,x86只用了大約0.275秒。這快了近13倍!
.NET Framework 2.0,3.0和3.5同樣糟糕。針對.NET 4 &在x64下4.5 4.5秒左右的時間要好得多,但這仍然是緩慢的3倍(x86大約是0.28秒),我想用.NET 3.5來增加用戶基數。
所以我的問題是:是什麼導致x64版本啓動這麼慢,我怎麼可以讓它更快,以便它相媲美x86版本?
如果有人想立即測試,我創建了VS 2010項目,該項目可以在這裏下載的ZIP:http://www.skytopia.com/stuff/64_vs_32bit_Startup_Speed.zip
32位和64位之間的一個性能差異在於64位JITter編譯所花的時間更長(但生成的代碼更好)。但我認爲你的代碼不太可能受到JIT性能的限制,所以不應該成爲你的性能問題的原因。新的RyuJIT提高了64位JIT時間,但產生比當前64位JITter更糟的代碼。 – CodesInChaos
@CodesInChaos:有趣。我決心要做到這一點的底部。它具有很高的可重複性,對許多用戶和開發人員有很大的影響。 –
將.net 4.5而不是3.5的性能從我的機器上的2.0秒提高到1.3。 – CodesInChaos