【发布时间】:2013-02-06 13:27:12
【问题描述】:
我在一个应用程序中使用 .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 位机器上运行。 (数据库在不同的机器上运行)
在 x86 支持下提供 12% 的性能差异。 IE。如果 x86 版本每秒运行 100 个查询,那么 x64 版本每秒运行 88 个查询。
这是 .NET 上 32 位和 64 位之间的预期/正常性能差异吗?
我可以做些什么来在 64 位版本中获得与 32 位版本相同的性能?
在上面的例子中,MyEntity 是一个非常简单的实体,有一个 Id 和一个名称
通常应用程序作为 Windows 服务运行,但在测量时,它作为普通 Windows 应用程序 (WPF) 运行
【问题讨论】:
-
尝试只比较一次查询运行。测试时应用不同速度也有类似问题:stackoverflow.com/questions/12584628/…
-
第一次创建实体上下文和第一次运行查询对我的用例来说并不有趣。我的测试通过在开始测量时间之前运行一些查询来“预热”实体框架来处理这个问题。 (我在问题中对此进行了澄清)
标签: performance entity-framework-4 64-bit 32-bit