2013-02-21 83 views
4

我在應用程序中使用.NET Framework 4.0中的實體框架。使用32位和64位實體框架的性能差異

將操作系統升級到64位版本後,我注意到應用程序中的CPU使用率較高。

編譯專門針對x86的應用程序(而不是以前的任何CPU),應用程序恢復到與操作系統升級前相同的CPU使用率。

我沒有使用下面的代碼

一些熱身代碼,以便創建上下文首次運行首次查詢的開銷,不測量之前運行一些更詳細的測量。這些案件是不是我的應用程序非常有趣,因爲它是一個長期運行的應用程序

var s = Stopwatch.StartNew(); 
var name = "name"; 
for (var i = 0; i < 100000; ++i) { 
    using (var context = new MyDatabaseEntities()) { 
     var entity = context.MyEntities.FirstOrDefault(e => e.Name == name); 
    } 
} 
s.Stop(); 

上面的代碼編譯無論是在Windows 7 64位x86或x64(任何CPU給出相同的結果爲64位),然後運行機。 (該數據庫運行在不同的機器上)

在x86有利條件下,性能相差12%。即如果x86版本每秒運行100次查詢,則x64版本每秒運行88次查詢。

這是在.NET上32位和64位之間的預期/正常性能差異嗎?

我能做些什麼來獲得與32位版本相同的64位版本的性能?

在上面的例子中myEntity所是一個很簡單的實體與一個ID和一個名稱

通常情況下,應用程序被運行作爲Windows服務,但在測量時,它被運行作爲一個正常的Windows應用程序(WPF)

+0

試着只比較一個查詢運行。有類似的問題涉及不同的應用程序在測試過程中的速度:http://stackoverflow.com/questions/12584628/entity-framework-spinup-much-slower-on-x64-vs-x86 – 2013-02-21 13:50:08

+0

首次創建的實體上下文和查詢的第一次運行對我的用例來說並不有趣。我的測試通過在開始測量時間之前運行一些查詢來「預熱」實體框架來處理這個問題。 (我在這個問題中增加了一個解釋) – UserWithQuestions 2013-02-25 09:16:33

回答

-1

您是否得到相同的實體一遍又一遍?你究竟想要測試什麼?真正的應用程序往往表現出不同於你的測試。做一個真正的senario,你有不同的實體,你會得到其他結果。如果你知道你的應用程序將如何使用,你應該只測試一下。使用更多內存的應用程序通常在64位上表現更好。在你的情況下,內存使用率可能會很低,所以你可以獲得更好的32位性能。

-1

在我的情況下,我使用asp.net和x86,因爲內存使用率低於2GB。 x64會使memorou的使用量翻倍,但你可以分配2GB以上。這裏有一個類似的問題: x64 vs x86 Performance Considerations .Net