Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Wydajne aplikacje na 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 ( 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 ubocznym Object.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 - klasa StringBuilder 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} Uzyj for(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 : ADO.NET Korzystaj z odpowiedniego sterownika ( provider )
Zarządzany zamiast OLEDB/ODBC ( MSSQL, Oracle ) Korzystaj z właściwej metody dostępu do danych DataSet - ograniczaj rozmiar DataReader ( Command.ExecuteReader ) Command.ExecuteScalar Command.ExecuteNonQuery Nie korzystaj z kursorów serwerowych (model ADO) Wykorzystuj procedury składowane Pooling połączeń wymaga identycznych param. (ConnectString) Wywołuj Dispose() !
15
Biblioteki : ASP.NET Caching Stan sesji – właściwy model
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
16
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
17
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
18
Plan Definicje wydajności Optymalizacje CLR Optymalizacje bibliotek
Optymalizacje .NET Framework Narzędzia
19
.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
20
.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 )
21
Plan Definicje wydajności Optymalizacje CLR Optymalizacje bibliotek
Optymalizacje .NET Framework Narzędzia
22
Narzędzia : PerfMon, inne
Miara wykorzystania zasobów Środowiska testowe / produkcyjne Czytelnie skategoryzowane Możemy tworzyć własne liczniki Allocation Profiler Na witrynie Intel: VTune NuMega: DevPartner Profiler Rational Software: Quantify
23
Podsumowanie CLR: Biblioteki
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
24
Bibliografia Microsoft Developer Network
Subskrybcja, MSDN Online Witryny tematyczne Newsgroups microsoft.public.dotnet.* microsoft.public.pl.developer microsoft.public.dotnet.framework.performance oraz publikacje Microsoft Press
25
… dziękuję za uwagę - pytania ?
26
Serdecznie dziękuję za uwagę…
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.