在x64和x86上,实体框架的旋转速度要慢得多

时间:2012-09-25 14:03:11

标签: c# performance entity-framework x86 64-bit

我的同事昨天发布了这个问题: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位系统时,实体框架似乎正在经历一个完全不同的初始化过程。有没有人能够深入了解引擎盖下的内容来解释这个问题?

1 个答案:

答案 0 :(得分:11)

该问题完全可以重现。我刚刚运行它并使用dotTrace Performance Profiler来收集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显示相同的行为。