1 / 25

Wydajne aplikacje na platformie .NET

Wydajne aplikacje na platformie .NET. Michał Jerzy Kostrzewa Microsoft Sp. z o.o. Plan. Definicje wydajności Optymalizacje CLR Optymalizacje bibliotek Optymalizacje .NET Framework Narzędzia. Definicje : Wydajność ?.

billy
Download Presentation

Wydajne aplikacje na platformie .NET

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Wydajne aplikacjena platformie .NET Michał Jerzy Kostrzewa Microsoft Sp. z o.o.

  2. Plan • Definicje wydajności • Optymalizacje CLR • Optymalizacje bibliotek • Optymalizacje .NET Framework • Narzędzia

  3. Definicje : Wydajność ? • Minimalnie użycie zasobów ? Ilość pracujących użytkowników ? Czas wykonania operacji ? • ... Przez serwer? ... Przez komputer klienta? • Czas odpowiedzi( dł. kolejki * czas ) + czas Przepustowość il. zadań / czas • Zasadniczy wpływ na wydajność ma architektura • Wydajność jest wymaganiem podstawowym • Na etapie założeń i planowania… • Weryfikowanym na bieżąco na wszystkich etapach • Krótszy kod to szybszy kod ( są wyjątki…  ) • Maksymalnie zbliżaj kod do używanych zasobów • Cenne zasoby odzyskuj i wykorzystaj ponownie • Wykorzystuj wolny czas procesora ( praca asynchroniczna )

  4. Plan • Definicje wydajności • Optymalizacje CLR • Optymalizacje bibliotek • Optymalizacje .NET Framework • Narzędzia

  5. CLR: Garbage Collector • GC – optymalizowany, szybszy niż C/C++ • Generacje - czas życia obiektu • Koszt : Gen. 0 – jak błąd strony ( 0 - 10 ms )Gen. 1 – ok.. 10 do 30 ms, • Generacja 2 (pełne): zależy od ( app. working set) • Odśmiecanie = dealokacja + konsolidacja wolnej pamięci • Bardzo duże obiekty są umieszczane na osobnej stercie ( LOH ) • Odśmiecanie działa z opóźnieniem • Aby nie spowalniać głównego programu…

  6. CLR : Garbage Collector • Kiedy działa GC : heurystyka… • … co daje niedeterministyczną finalizację • Finalizacja przez osobny wątek, kolejka finalizacji • Zalecamy rezygnację z finalizatorów ! • Np. opakowanie min. klasy finalizowanej w niefinalizowaną • Jeśli wymagamy finalizacji – IDisposable.Dispose • Ręczne wywołania Dispose() / w C# using(..){//praca} • Można implementować finalizację oraz Dispose - GC.SuppressFinalize() • Zalecamy także: • korzystaj ze słabych referencji - „rezurekcja” • Nie wymuszaj odśmiecania ( GC.Collect(gen) ) • Dobry podgląd GC  PerfMon 1

  7. CLR : Reference vs value types • Typy reference są tworzone na stercie ( GC ) • Typy wartości są tworzone na stosie lub inline • Znakomite dla prostych struktur • Podstawowe typy platformy .NET - typy wartości • Pakowanie i odpakowanie ( boxing / unboxing ) • …gdy na Value Type wykonujemy operację jak na Reference Type • Np. wywołanie metody wirtualnej, operacje via Object • Pakowanie : alokacja sterty i kopiowanie • Sprawdź: ILDasm.exe, narzędzia profilujące • brak liczników PerfMon !  2

  8. CLR : Reflection, późne wiązanie • Refleksje mogą być kosztowne • Porównania ( typeof() ), wyliczenie ( Type.GetFields() ), dostęp ( Type.InvokeMember() ) • Ostrożnie - refleksje mogą być efektem ubocznymObject.ToString() , [Serializable] • Visual Basic .NET oraz JScript niejawnie obsługują późne wiązanie poprzez interfejs API Reflection • Gdy używamy zmiennych typu Object • Unikaj późnego wiązania - refleksje • W Visual Basic .NET wczesne wiązanie wymuszamy:Option Explicit On, Option Strict On 3

  9. CLR : Structured Exception Handling • Ujednolicony mechanizm sygnalizacji AWARII • Wyjątki są tanie... dopóki nie zostaną zgłoszone  • Optymalizacje : • Zgłaszaj wyjątki tylko w wyjątkowych sytuacjach - Nie używaj wyjątków do sterowania programem • Monitoring - liczniki wydajności 4

  10. Plan • Definicje wydajności • Optymalizacje CLR • Optymalizacje bibliotek • Optymalizacje .NET Framework • Narzędzia

  11. Biblioteki : Łańcuchy znaków • Zmienne typu System.String są niemodyfikowalne • Do manipulacji łańcuchami - klasaStringBuilder • Uwaga na porównania • String.CompareTo(), String.Compare(), String.CompareOrdinal() • string interning - Object.ReferenceEquals() • Uwaga na foreach() ( używa IEnumerable ) • Zamiast foreach(char c in str) { //praca c} • Uzyjfor(int i=0;i < str.Length;i++) {//praca str[i]} 5 5a

  12. Biblioteki : Typy tablicowe • Zalecenia • używaj tabel ze ścisłą kontrolą typów ( wiązanie, boxing ) • ( JIT ) korzystaj z : for(i=0; i<myArray.Length; i++){;} • Zamiast tablic wielowymiarowych – tablice jagged • jagged są wydajniejsze (w v1), nie ma ich w CLS • Oszacuj rozmiary kolekcji • Zmiana rozmiaru wymaga zbędnych kopii • VB : uwaga na ReDim … Preserve

  13. Biblioteki : Wielowątkowość • Wykorzystanie wielu wątków • Korzystaj z puli wątków ( wątki .NET a wątki OS ) • Lepsza wydajność dla SMP • Synchronizacja • Wybierz najlżejszy mechanizm • Korzystaj z System.Threading.Interlocked • Ostrożnie z Monitor ( C# : lock()VB :SyncBlock ) • Używaj blokady współdzielonej tylko gdy niezbędna( ReaderWriterLock() ) • Korzystaj z wywołań asynchronicznych - • Dla lepszego odbioru wydajności aplikacji… 6 6a

  14. Biblioteki : ASP.NET • Caching • <%@OutputCache..%>: czas, parametry, nagłówek • Przechowywanie fragmentów - UserControls • API System.Web.Caching.Cache • Powiązania z plikiem, folderem lub Object, callback • Stan sesji – właściwy model • Inproc/server/database/none, warto ReadOnly • Stan formularza (viewstate) – tylko gdy potrzebny • dla strony / kontrolki : EnableViewState = “false” • Migracja ( dawne ASP działa w STA ) • dyrektywa <%@ Page AspCompat=„true” %> • wczesne wiązanie zamiast Server.CreateObject(…) • Zamiast COM STA : zarządzane klasy opakowujące, port

  15. Biblioteki : .NET Remoting • Optymalizacje : • Stosuj wywołania zbiorcze zamiast pojedynczych • użyj TCP/binary ( ale uwaga na zabezpieczenia ) • Aktywacja przez serwer • SingleCall – bezstanowy, brak synchronizacji, inicjalizacja • Singleton – najlżejszy, wymaga synchronizacji • Aktywacja przez klienta • CAO – serwer utrzymuje stan • Remoting  WebServices • „rich type fidelity”  standardy http://msdn.microsoft.com/library/en-us/dnbda/html/bdadotnetarch14.asp

  16. Biblioteki : Enterprise Services • Korzystaj z usług ES jeśli są niezbędne • Korzystaj z aplikacji bibliotecznych COM+ • Komponenty CLR w ES są komponentami CLR • unikaj finalizatora • Object Pooling : wywołuj Dispose() 7

  17. Plan • Definicje wydajności • Optymalizacje CLR • Optymalizacje bibliotek • Optymalizacje .NET Framework • Narzędzia

  18. .NET Framework : JIT • JIT optymalizuje kod dla konkretnego modelu procesora • Działa na poziomie metod ( You pay for what You use ) • Optymalizacje : • method inlining : 32 B IL, bez funkcji wirtualnych, SEH, struktur, proste instrukcje sterujące • Eliminacja sprawdzania zakresu : nie przechowuj rozmiarów • śledzenie użycia zmiennych/param. – max 64 ( rejestry CPU ) • propagacja stałych, kopiowania, usuwanie poza pętle • Brak optymalizacji w środowisku Visual Studio • Prekompilacja przez NGEN.exe skraca uruchomienie • W trakcie instalacji lub na żądanie • Jeśli prekompilacja – tylko na maszynie docelowej ! • UWAGA : zastosowanie NGEN.EXE może spowolnić wykonanie

  19. .NET Framework : GC hosting • Dwie wersje środowiska CLR : • Workstation GC ( mscorwks.dll ) • Jednowątkowy z usypianiem • Optymalizacja : minimalne opóźnienia • Server GC ( mscorsvr.dll ) • Wielowątkowe z wydziedziczaniem, synchroniczny • Optymalizacja : przepustowość, CPU cache & thread affinity • Osobne regiony na zarządzanej stercie - fragmentacja • Wyższa wydajność odśmiecania niż wersja wks • .NET Application Domains wykonują się wewnątrz hosta • IE, Explorer używają mscorwks.dll • ASP.NET uzywa mscorsvr.dll • DIY jeśli potrzebny mscorsvr.dll … ( przykład w MSDN ) • Do It Yourself… ( przykład w MSDN ) 

  20. Plan • Definicje wydajności • Optymalizacje CLR • Optymalizacje bibliotek • Optymalizacje .NET Framework • Narzędzia

  21. Narzędzia : PerfMon, inne • Miara wykorzystania zasobów • Środowiska testowe / produkcyjne • Czytelnie skategoryzowane • Możemy tworzyć własne liczniki • Allocation Profiler • Na witrynie http://www.gotdotnet.com/ • Intel: VTune • http://developer.intel.com/ • NuMega: DevPartner Profiler • http://www.compuware.com/products/numega/dps/profiler/ • Rational Software: Quantify • http://www.rational.com/

  22. Podsumowanie • CLR: • Garbage Collector – „profil” alokacji • Reference / Value Types, boxing • Reflection - późne wiązanie • Structured Exception Handling • Biblioteki • Typy znakowe, Typy tablicowe • Wielowątkowość - pula wątków, blokowanie • ASP.NET – stan sesji, viewstate, caching • Enterprise Services – oszczędnie, aplikacje library • Performance counters – gdy zmierzysz, uwierzysz • Polecamy Windows 2003 / .NET Framework 1.1 • ZNACZNIE lepsze mechanizmy SMP, obsługa 3GB

  23. Bibliografia • Microsoft Developer Network • Subskrybcja, MSDN Online • Witryny tematycznehttp://www.develop.com/http://www.gotdotnet.comhttp://www.asp.net • Newsgroups • microsoft.public.dotnet.* • microsoft.public.pl.developer • microsoft.public.dotnet.framework.performance • oraz publikacje Microsoft Press

  24. … dziękuję za uwagę - pytania ?

  25. Serdecznie dziękuję za uwagę…

More Related