Подтвердить что ты не робот

Расширение платформы Entity Framework намного медленнее на x64 против x86

Вчера мой сотрудник опубликовал этот вопрос: 7-секундное время запуска EF даже для крошечного DbContext.

После того, как он выполнил свой код и переместил его в отдельное решение, чтобы изолировать его как можно больше, я обнаружил, что целевая целевая платформа проекта сильно повлияла на время запуска процесса запуска EF.

При таргетинге на x64 я увидел, что тест занял ~ 7 секунд, чтобы развернуть первый DbContext и < 1 секунду, чтобы развернуть второй DbContext (в соответствии с результатами моих коллег, которые также нацелены на x64). Однако, когда я переключил платформу на x86, первое время разворота DbContext уменьшилось примерно на 4 секунды до 3,34633 секунды, а второй DbContext занял тот же промежуток времени, что и x64.

Учитывая это, похоже, что Entity Framework переживает значительно другой процесс инициализации, когда нацеливается на 64-битную систему против 32-разрядной системы. Кто-нибудь имеет представление о том, что происходит под капотом, чтобы объяснить это?

4b9b3361

Ответ 1

Проблема полностью воспроизводима. Я только что запустил его и использовал профилировщик dotTrace Performance для сбора снимков для исполнения x86 и x64. Я получаю в основном то же самое время, что и вы. Но нет никакой очевидной разницы между трассами x64 и x86 - за исключением того, что x64 занимает как минимум в два раза больше времени x86 во всем мире.

Но это было отслеживание тестового прогона NUnit. Запустив те же тесты, что и консольные приложения, я получаю такие моменты:

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

Это выглядит намного лучше, не так ли? По-прежнему существует разница между x86 и x64, но для некоторых операций код x64 может быть медленнее.

Проблема в этом вопросе не о EF, а о NUnit и его тестовом бегуне.

Edit:

Я сделал еще несколько тестов. У этой задачи есть и задача NUnit и Resharper, но она влияет только на самый первый тест. Все остальные тесты выполняются быстро. xUnit показывает то же поведение.