Prosta strona testowa zajmuje około 4 s, aby załadować mały zestaw danych za pośrednictwem źródła danych encji. Klon strony ładowanie tych samych danych przy użyciu źródła danych SQL zajmuje 70 ms.

Uruchom na serwerze lokalnym uzyskującym dostęp do Azure DB EF i SQL są nawet pod względem wydajności. Uruchomiony profiler SQL, a SQL prawie identyczny i szybki (~20 ms).

Azure hostowana aplikacja sieci web asp.net targeting.Net 4.7.2 z EF6. Inne strony w projekcie korzystające z tego samego modelu danych mają podobne problemy z wydajnością. Użyłem EF6 w podobnych projektach bez problemu.

  <div>
    <asp:GridView ID="GridView1" runat="server" DataSourceID="edsLists"></asp:GridView>
  </div>

  <asp:EntityDataSource ID="edsLists" runat="server" 
      ConnectionString="name=DatabaseEntities" 
      DefaultContainerName="DatabaseEntities" EnableFlattening="False" 
      EntitySetName="Lists" AutoGenerateWhereClause="True" Where=""  
      Include="">
  </asp:EntityDataSource>


    <div>
      <asp:GridView ID="GridView1" runat="server" DataSourceID="edsLists"></asp:GridView>
    </div>

  <asp:SqlDataSource ID="edsLists" runat="server" ConnectionString="<%$ ConnectionStrings:dbConnectionString %>" SelectCommand="SELECT * FROM [Lists]">
  </asp:SqlDataSource>

Aktualizacja: Oto dane wyjściowe ze śledzenia: tu wpisz opis obrazu

enter image description here

Oto ślad tej samej strony używającej źródła danych SQL:

enter image description here

Wydajność EF6(test1)/SQL(test2): tu wpisz opis obrazu

0
user965614 20 grudzień 2019, 02:46

1 odpowiedź

Jeśli platforma zachowuje się nienormalnie i występuje dodatkowe opóźnienie spowodowane infrastrukturą usług aplikacji. Jeśli problem występuje w tej chwili, zbierz ślad profilera, przechodząc do Diagnose and Solve Blade, Diagnostics as a Service i wybierając CLR Profiler, aby zidentyfikować spowolnienie.

Zalecenie

  • Włącz lub sprawdź Application Insights dla swojej aplikacji internetowej.
  • Uzyskaj zrzut pamięci procesu
  • Uruchom Remote Profiler

Sugerowałbym również uruchomienie profilu NHibernate dla struktury encji, aby zobaczyć wszelkie problemy N + 1, jeśli istnieje, napraw to przed uruchomieniem.

Jeśli masz jakieś pytania lub wątpliwości, daj mi znać.

Aby dać ci wgląd, oto proces, który stosujemy, aby go rozwiązać. Chociaż jest to związane z dot net core, ale można go znaleźć podobnie do asp.net, jak również w aplikacji internetowej Azure:

  • Przejdź do sekcji Diagnozuj i rozwiązuj problemy --> Narzędzia diagnostyczne. Jeśli stos zostanie wykryty jako „ASP.NET Core”, narzędzia zostaną wymienione poniżej. Jeśli nie, możesz wybrać opcję po prawej stronie.

  • Teraz "Zbierz ślad .NET Profiler" jest wymieniony w stosie ASP.NET Core.

  • Kliknij "Zbierz .NET Profiler". Wymaga to pewnych zmian na poziomie kodu, aby aplikacje .NET Core mogły emitować zdarzenia ETW. Komunikat wymagań dotyczących zbierania śledzenia ASP.NET Core Profiler jest pokazany poniżej. Upewnij się, że aplikacja internetowa spełnia wymagania.

  • Istnieją dwa tryby zbierania danych: Zbieraj i analizuj dane oraz Zbieraj tylko dane. „Zbieraj tylko dane” nie wygeneruje raportu z analizy.

- Jeśli wybierzesz „Zbieraj tylko dane”

Kliknij przycisk "Zbierz śledzenie profilu profilu", aby rozpocząć zbieranie, tak jak w przypadku normalnej aplikacji .NET.

  • Po zakończeniu zbierania danych możesz kliknąć link, aby pobrać plik .zip (diagsesja) i przeanalizować lokalnie za pomocą perfview.

Ostatnie 5 sesji profilowania jest wymienionych na bieżącej karcie "Zbieranie śledzenia programu .NET Profiler".

  • Kliknij „tutaj”, aby przejść do zakładki „Narzędzia diagnostyczne”, aby zobaczyć wszystkie sesje. Stamtąd możesz pobrać dane i raport. W każdej sesji dostępne są informacje o wykorzystaniu miejsca na dysku. Na podstawie tych informacji możesz usunąć niektóre sesje, aby zwolnić miejsce na dysku.

- Jeśli wybierzesz „Zbieraj i analizuj dane”

Możesz nie tylko pobrać plik zip, ale także otworzyć raport analizy. Obsługa platformy .NET Core jest dostępna w analizatorze śledzenia Profiler.

  • Obsługa platformy .NET Core w analizatorze śledzenia Profiler Powolne żądania tu wpisz opis obrazu

    Karta ".NET Core Powolne żądania" w raporcie śledzenia programu Profiler. Pokazuje najwolniejsze żądania ASP.NET Core w tym śladzie.

Szczegóły każdego wolnego żądania zawierają listę wywołań i pełnego śledzenia żądań:

enter image description here

Mam nadzieję, że to pomoże.

0
Mohit Verma 20 grudzień 2019, 11:02
Dziękuję Mohit... właściwie wykonałem ślady zarówno w aplikacji, jak i sql, ale nadal nie mogę zrozumieć przyczyny. Wkleję stos wywołań do mojego posta... być może zauważysz problem.
 – 
user965614
21 grudzień 2019, 00:32