21

我的同事昨天发布了这个问题:7-second EF startup time even for tiny DbContext

在将他的代码移到单独的解决方案中以尽可能将其隔离后,我发现包含项目的平台目标对 EF 启动过程的运行时产生了深远的影响。

当以 x64 为目标时,我看到测试用了大约 7 秒来启动第一个 DbContext,并且不到 1 秒来启动第二个 DbContext(与我的同事的发现一致,他也以 x64 为目标)。但是,当我将平台目标切换到 x86 时,第一个 DbContext 启动时间减少了大约 4 秒,降至 3.34633 秒,而第二个 DbContext 花费的时间与 x64 情况相同。

鉴于此,当针对 64 位系统和 32 位系统时,Entity Framework 似乎正在经历一个截然不同的初始化过程。有没有人对引擎盖下发生的事情有任何洞察力来解释这一点?

4

1 回答 1

11

这个问题是完全可重现的。我刚刚运行它并使用 dotTrace 性能分析器收集 x86 和 x64 执行的快照。我得到的时间和你报告的差不多。但是 x64 和 x86 跟踪之间确实没有明显的区别—​​—除了 x64 在任何地方都需要至少两倍于 x86 的时间。

但那是对 NUnit 测试运行的跟踪。通过像控制台应用程序一样运行相同的测试,我得到这样的时间:

x86: 0,6864012, 0,0468001
x64: 1,0608019, 0,0468001

这看起来好多了,不是吗?x86 和 x64 之间仍然存在差异,但是对于某些操作,x64 代码通常会更慢。

此时的问题不在于 EF,而在于 NUnit 及其测试运行器。

编辑:

我又做了一些测试。NUnit 和 Resharper 的任务运行器都有这个问题,但它只影响第一次测试。所有其他测试都运行得很快。xUnit 显示相同的行为。

于 2012-09-25T17:55:57.593 回答