2013-02-21 79 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