在x64和x86上,entity framework的旋转速度要慢得多

我的同事昨天发布了这个问题: 即使对于微小的DbContext,7秒的EF启动时间 。

在获取代码并将其移至单独的解决方案以尽可能地隔离它之后,我发现包含项目的平台目标对EF启动过程的运行时有深远的影响。

当针对x64时,我看到测试需要大约7秒来启动第一个DbContext并且<1秒来启动第二个DbContext(与我的同事的调查结果一致,也是针对x64)。 但是,当我将平台目标切换到x86时,第一个DbContext旋转时间减少了大约4秒,减少到3.34633秒,而第二个DbContext花费了与x64情况相同的时间。

鉴于此,当针对64位系统和32位系统时,entity framework似乎正在经历一个完全不同的初始化过程。 有没有人能够深入了解引擎盖下的内容来解释这一点?

这个问题完全可以重现。 我刚刚运行它并使用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显示相同的行为。