9

Może ktoś wyjaśnićDlaczego DbContext.SaveChanges 10x wolniej w trybie debugowania

  1. Dlaczego DbContext.SaveChanges uruchomić ~ 10x wolniej niż w trybie debugowania trybie produkcyjnym?
  2. Czy mogę to przyspieszyć?

W trybie debugowania strona internetowa zajmuje 116 sekund, aby załadować w porównaniu do 15 sekund, jeśli rozpocznę projekt bez debugowania.

Mam ustawione zestawienia śledzenia i stwierdziłem, że ~ 100 z 116 sekund jest używane w mojej metodzie DbContext.SaveChanges w trybie debugowania.

Uruchamianie projektu bez debugowania trwa tylko 7 sekund w tej samej sekcji.

Dajcie znać w komentarzach, jeśli chcesz uzyskać więcej informacji ..

Ustawienia projektu:

  • strona ASP.NET
  • VS2012
  • SQLServer2012
  • Entity Framework 5.0

Dodatek l Info: (Daj mi znać w komentarzach, jeśli potrzebujesz więcej)

  • Numer skumulowana SQL zapytań ponad metody SaveChanges jest 20000
  • Production Connection String: Data Source = PC-DEV; Initial Catalog = aspnet-2013-06-04, Integrated Security = True; MultipleActiveResultSets = True; Nazwa aplikacji = EntityFrameworkMUE
  • Ciąg połączenia debugowania: Źródło danych = PC-DEV; Początkowy katalog = aspnet-2013-06-04; Integrated Security = True ; MultipleActiveResultSets = True; Nazwa aplikacji = EntityFrameworkMUE
  • Doświadczyłem również tej samej względnej wydajności z LocalDB jako bazy danych

Aktualizacja:

Jak @ruionwriting zasugerował, że profilowane bazy danych i co znalazłem jest to, że ~ 20.000 polecenia SQL wziąć dokładnie ten sam czas, czy projekt jest prowadzony w trybie debugowania lub produkcyjnym. (0 ms na polecenie).

Jednak różnica bezwzględna czasu pomiędzy 20 000 poleceń wynosi średnio 5 ms w trybie debugowania.

W odróżnieniu od trybu produkcji, średnia różnica czasu w stosunku do zestawu poleceń wynosi 0.3 ms.

Jest to przybliżona 10-krotna różnica wydajności i izoluje strukturę encji jako czas poświęcony na debugowanie.

Czy istnieje sposób konfiguracji kompilacji debugowania, aby można było odwoływać się do EntityFramework bez debugowania flag?

A jeśli miałbym w jakiś sposób osiągnąć wydajność przez jakąś magię kompilatora, co bym stracił pod względem możliwości debugowania? Obecnie nie mogę wkroczyć w kod struktury encji, więc nie sądzę, żebym tęsknił za niczym.

Dzięki!

+0

Jak ciąg połączenia wyglądać, podczas debugowania? – RealityDysfunction

+0

@RealityDysfunction zaktualizował pytanie ciągiem w trybach produkcji i debugowania. – Jesse

+0

Czy masz zaznaczone "Włącz tylko mój kod" w VS? W menu Debuguj-> Opcje i ustawienia-> Ogólne-> Włącz tylko mój kod. Może masz to niezaznaczone, a VS próbuje debugować EF? – Tombala

Odpowiedz

18

Whohoo!

OK, więc powodem, dla którego tryb debugowania był wyjątkowo powolny, było to, że program Visual Studio's Intellitrace rejestrował każde zdarzenie ADO.NET (wszystkie 20 000) wygenerowane przez Entity Framework.

Więc Narzędzia-> Opcje -> IntelliTrace i Usuń zaznaczenie pola wyboru "Włącz funkcję IntelliTrace" rozwiązało problem.

Albo można też po prostu odfiltrować zdarzenia ADO.NET przechodząc do Narzędzia-> Opcje -> -> IntelliTrace IntelliTrace Imprezy i odznacz ADO.NET

Dzięki za sugestie każdego z nas.

Sekcja tu mówi o Will Intellitrace slow down my app

Jak Filter IntelliTrace Events

+1

Dotyczy tylko Visual Studio Ultimate. – Vlad

Powiązane problemy