Dot-Net

WPF 在 .NET Framework 4.0 中的 x64 上啟動緩慢

  • June 1, 2010

我注意到,如果我為 Any CPU/x64 建構 WPF 應用程序,啟動(大約 20 秒左右)或載入新控制項的時間要比在 x86 上啟動(在發布和調試模式下)要長得多,在 VS 內部或外部)。即使是最簡單的 WPF 應用程序也會發生這種情況。這個 MSDN thread討論了這個問題,但沒有提供答案。這只發生在 .NET 4.0 中——在 3.5 SP1 中,x64 與 x86 一樣快。有趣的是,微軟似乎知道這個問題,因為 VS2010 中新 WPF 項目的預設設置是 x86。

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

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

實際上,WPF 應用程序的預設項目類型是 x86 有兩個主要原因。

  • Intellitrace 調試僅適用於 x86,如果預設項目模板無法使用它們的明星功能之一,那看起來會很糟糕。
  • 許多開發人員仍然不知道他們的 AnyCPU exe 會在 64 位機器上以 x64 方式執行這一事實,並且驚訝地發現他們所依賴的 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 的。

(順便說一句,當我執行上述關於無法載入的程序集的命令時,我確實遇到了幾個錯誤。主要是 SQL 和 Visual Studio 程序集。)

引用自:https://stackoverflow.com/questions/2947118