2012-09-25 2 views
20

내 동료가 어제이 질문에 게시했습니다 : 7-second EF startup time even for tiny DbContext.x64와 x64에서 Entity Framework의 회전 속도가 훨씬 느림

코드를 취하여 가능한 한 많이 분리하기 위해 별도의 솔루션으로 이동 한 후 포함 된 프로젝트의 플랫폼 대상이 EF 시작 프로세스의 런타임에 큰 영향을 미치는 것으로 나타났습니다.

x64를 타겟팅 할 때 첫 번째 DbContext를 스핀 업하려면 7 초, 두 번째 DbContext를 스핀 업하려면 < 초 (x64를 대상으로하는 동료의 결과와 일치)가 걸린 것을 확인했습니다. 그러나 플랫폼 대상을 x86으로 전환하면 첫 번째 DbContext의 스핀 업 시간이 약 4 초 줄어들어 3.34633 초가되고 두 ​​번째 DbContext는 x64 경우와 동일한 시간이 걸렸습니다.

이 경우 Entity Framework는 64 비트 시스템과 32 비트 시스템을 대상으로 할 때 훨씬 다른 초기화 프로세스를 진행하고있는 것처럼 보입니다. 누가 이것을 설명하기 위해 두포에서 진행되고 있는지에 대한 통찰력이 있습니까?

+0

아마 조립 조사입니까? 퓨전 로그를 신속하게 확인할 수 있습니다. –

+0

@CraigStuntz 융합 로그를 확인한 결과, x86 대 x64에서 다르게 나타난 것은 아무것도 보지 못했습니다. – Sidawy

+1

이것은 흥미 롭습니다. FYI EF는 32 비트 또는 64 비트 아키텍처에 특정한 코드를 가지고 있지 않습니다. 이것은 순수 IL입니다. 여전히 그 차이는 엄청납니다. – Pawel

답변

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은 동일한 동작을 보여줍니다.

+2

과 함께 x86으로 전환하여 엄청난 속도 향상을 얻었습니다. 그들이 뭐라고하는지 안다."두 배로, 두 배 재미!" 오 기다려. 그건 맞지 않습니다. – BoltClock

+0

매우 흥미 롭습니다. 나는 같은 흔적을 그리며 같은 행동을 보았다. Nunit 러너와 EF 사이의 상호 작용이 왜 x64에서 런타임의 증가를 가져 오는지에 대한 질문을 제기합니다. – Sidawy