4

我在应用程序中使用 .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) 运行

4

2 回答 2

-1

你一遍又一遍地得到同一个实体?你到底想测试什么。实际应用程序的行为往往与您的测试不同。做一个真正的情景,你有不同的实体,你会得到其他的结果。仅当您知道如何使用您的应用程序时才应该对此进行测试。使用更多内存的应用程序通常在 64 位上性能更好。在您的情况下,内存使用率可能会很低,因此您可以获得更好的 32 位性能。

于 2013-02-25T09:34:12.480 回答
-1

在我的情况下,我使用 asp.net 和 x86,因为内存使用量低于 2gb。x64 将使 memorou 使用量翻倍,但您可以分配超过 2gb。这是一个类似的问题: x64 vs x86 Performance Considerations .Net

于 2013-02-26T02:00:22.527 回答