我在应用程序中使用 .NET Framework 4.0 中的实体框架。
将操作系统升级到 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 和 Name
通常应用程序作为 Windows 服务运行,但在测量时,它作为普通 Windows 应用程序 (WPF) 运行