2010-06-01 125 views
34

我注意到,如果我爲任何CPU/x64構建我的WPF應用程序,啓動需要很長時間(約20秒)或加載新的控制比在x86上啓動(在版本&調試模式下,在VS內部或外部)。即使是最簡單的WPF應用程序也會發生這種情況。該問題在this MSDN thread中討論,但未提供答案。這隻會發生在.NET 4.0中 - 在3.5 SP1中,x64與x86一樣快。有趣的是,微軟似乎知道這個問題,因爲VS2010中新的WPF項目的默認值是x86。WPF在.NET Framework 4.0的x64上啓動速度很慢

這是一個真正的bug還是我只是做錯了?

編輯:可能與此有關:Slow Databinding setup time in C# .NET 4.0。我大量使用數據綁定。

回答

68

其實主要有兩個原因,WPF應用程序的默認項目類型是x86。

  • Intellitrace調試只能與x86一起使用,如果默認項目模板不能用其星形特徵之一工作,那麼看起來會非常糟糕。
  • 許多開發人員仍然沒有意識到他們的AnyCPU exe會在64位機器上運行爲64位,並且驚訝地發現他們所依賴的32位DLL不存在於64位類型中,例如OLEDB驅動程序,某些本機DLL的,等

至於你所遇到的啓動時間問題,它似乎像有NGEN的問題。由於x64和x86進程有不同的NGEN高速緩存,因此可能需要重建或更新64位NGEN高速緩存。嘗試運行從提升的命令提示符下輸入:

CD C:\Windows\Microsoft.NET\Framework64\v4.0.30319 
NGEN update 

這是重新構建本地圖片已經被標記爲NGEN組件的命令。如果程序集不在GAC中,它也可能不會對NGEN有任何好處,因此我不打算嘗試這麼做。但是框架程序集,工具包程序集等都應該是NGEN'd。

(順便說一句,我沒有得到幾個錯誤,當我跑了有關程序集上面的命令不能被加載。這主要是SQL和Visual Studio程序集。)

+14

HOLY ****,它_WORKED_! !我從來不會想到這一點。你真的不辜負你的姓氏,兄弟。感謝* 1000! – 2010-06-01 04:25:45

+0

太棒了,很高興聽到它。 – Josh 2010-06-01 04:50:12

+3

Jeebus,這個建議創造奇蹟!他們究竟是怎麼設法使自己的緩存保持最新狀態,看到了這種影響? MS大失敗。順便說一下,你似乎需要在安裝特定更新之後重做此操作。 – 2012-01-13 10:54:38