使用32位和64位实体框架的性能差异

时间:2013-02-21 09:25:54

标签: performance entity-framework-4 64-bit 32-bit

我在应用程序中使用.NET Framework 4.0中的Entity Framework。

将操作系统升级到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();

以上代码编译为x86或x64(任何CPU提供与x64相同的结果)并在Windows 7 64位计算机上运行。 (数据库在不同的机器上运行)

x86s的性能差异为12%。即如果x86版本每秒运行100个查询,那么x64版本每秒运行88个查询。

这是.NET上32位和64位之间的预期/正常性能差异吗?

我能做些什么才能在64位版本中获得与32位版本相同的性能?

在上面的示例中,MyEntity是一个非常简单的实体,具有Id和名称

通常,应用程序作为Windows服务运行,但在测量时,它作为普通的Windows应用程序(WPF)运行

2 个答案:

答案 0 :(得分:-1)

你在agian上一遍又一遍地获得同一个实体?你究竟想要测试什么实际应用往往与您的测试表现不同。做一个真正的senario,你有不同的实体,你会得到其他结果。如果您知道应用程序的使用方式,则应该只测试此项。使用更多内存的应用程序通常在64位上表现更好。在您的情况下,内存使用率可能会很低,因此您可以获得更好的32位性能。

答案 1 :(得分:-1)

在我的情况下,我使用asp.net和x86,因为内存使用率低于2GB。 x64会使用两倍的记忆,但你可以分配超过2GB。这是一个类似的问题: x64 vs x86 Performance Considerations .Net