【问题标题】:Performance difference using entity framework in 32 bit and 64 bit在 32 位和 64 位中使用实体框架的性能差异
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-09-21
      • 2010-09-21
      • 2018-08-28
      • 2011-09-17
      • 2010-11-27
      • 2010-12-18
      • 2021-05-05
      • 2019-01-03
      • 1970-01-01
      相关资源
      最近更新 更多