Wydajne aplikacje na platformie .NET

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

C++ wykład 7 ( ) Wyjątki.
Wzorce.
Generics w .NET 2.0 Łukasz Rzeszot.
CORBA Łukasz Wnęk.
Wybrane elementy języka Java
Zarządzanie pamięcią: ręczne czy automatyczne
CLR na platformie .NET Tomasz Kostarski.
Odśmiecanie Grzegorz Timoszuk
Licznik template<class Count_Type> class Count { public:
Platforma .Net i Vs.Net.
Tworzenie ASP.NET Web Form
Systemy operacyjne Wykład nr 5: Wątki Piotr Bilski.
Wykład nr 2: Struktura systemu komputerowego a system operacyjny
C++ wykład 7 ( ) Wyjątki. Ogólne spojrzenie na wyjątki Wyjątki zaprojektowano do wspierania obsługi błędów. System wyjątków dotyczy zdarzeń synchronicznych.
Systemy operacyjne.
ASP.NET i platforma.NET Technologie internetowe ( ) Tomasz Popów
Temat nr 10: System przerwań
P I OTR SKOŁYSZ. POCHODZENIE I CELE CZYM JEST.NET ? CO IMPLEMENTUJE MONO ? ŚRODOWISKO PRACY [MONODEVELOP] SYTEMY OPERACYJNE CO PROGRAMOWAĆ ? JĘZYKI PRZYKŁADOWY.
Systemy zarządzania treścią CMS
Tablice tablica jest sekwencją elementów tego samego typu (prostego lub obiektowego) w Javie tablice są obiektami, a zmienne tablicowe przechowują referencję
Język Java Wielowątkowość.
Zastosowanie technologii CUDA w sztucznej inteligencji
SZPIF – Harmonogram, Opis narzędzi, Schemat bazy danych
POZNAŃ SUPERCOMPUTING AND NETWORKING CENTER WP 2.1 Zdalny dostęp do bibliotek naukowych Udział w projekcie: 6,51% Osoby kontaktowe: PCSS: Maciej Brzeźniak.
Systemy Czasu Rzeczywistego
Język C# Copyright, 2004 © Adam Czajka.
C# Windows Forms Zastosowania Informatyki Wykład 2
TBD - P ERFORMANCE W BAZACH M ICROSOFT SQL S ERVER, CZYLI O CO W TYM W OGÓLE CHODZI Michał Grodzicki MCTS SQL SERVER lipca 2012.
Podstawy C# Grupa .NET PO.
Rozwój aplikacji przy wykorzystaniu ASP.NET
Witold Bołt Wprowadzenie do .NET Witold Bołt
Programowanie urządzeń mobilnych – wykład IV
A ctive S erver P ages Technologia dostępu do danych.
Architektura aplikacji wielowątkowych Jakub Binkowski.
Programowanie Windows na przykładzie C# część 1
Inicjalizacja i sprzątanie
Narzędzia administracyjne
C# Cz.7 Refleksja, Atrybuty
Użytkowanie i programowanie Matlaba
Technologie Programowania seminarium
Wstęp do ASP.NET Arkadiusz Popa Serwery Aplikacji
W ą t e k (lekki proces) thread.
Kurs języka C++ – wykład 9 ( )
K URS JĘZYKA C++ – WYKŁAD 7 ( ) Wyjątki.
Responsywne aplikacje w Windows 8 i.NET 4.5 Jakub Binkowski.
Derekursywacja i optymalizacja kodu
Projektowanie Aplikacji Internetowych Artur Niewiarowski Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska.
Waldemar Bartyna Pytania egzaminacyjne 1.
Procesy, wątki Program a proces Proces: Przestrzeń adresowa, kod, dane, stos (część pamięci do przechowania zmiennych lokalnych i niektórych adresów) Otwarte.
Paweł Starzyk Obiektowe metody projektowania systemów
Platforma .Net.
Zestaw pytań nr. 3 Typy generyczne Wyjątki OPRACOWALI: JAKUB GRYCZEWSKIKINGA ROSA DANIEL KAPTEJNYWOJCIECH ŁĘCZYCKI
Temat 1 Pojęcie systemu operacyjnego Opracował: mgr Marek Kwiatkowski.
PO13-1 / 19 Wykład 13 Wyjątki i ich zgłaszanie Wyłapywanie wyjątków Obsługa wyjątków Wykorzystanie polimorfizmu Filtrowanie wyjątków Błędy w konstruktorach.
Rozpowszechnianie aplikacji KRYSTIAN KOWALCZUK TORUŃ,
Waldemar Bartyna Pytania egzaminacyjne 1.
Temat: Porównanie technologii php,c# oraz javascript na przykładzie webaplikacji typu społecznościowy agregator treści Autor: Wojciech Ślawski.
Visual Basic przygotował Michał Miłek Visual Basic – język programowania wysokiego poziomu i narzędzie programistyczne firmy Microsoft. Składnia jest oparta.
Języki i technologie wytwarzania stron WWW Autor: Michał Walkowski Referat.
T ESTY JEDNOSTKOWE W C# Alicja Majka, A GENDA Wprowadzenie do środowiska Czym są testy jednostkowe i po co je stosować? XUnit, NUnit Pokrycie.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Programowanie Obiektowe – Wykład 6
Optymalizacja programów Open-Source
Typy wyliczeniowe, kolekcje
Windows Workflow Foundation
Aplikacje i usługi internetowe
Podstawy programowania
Założenia projektowe Javy
Zapis prezentacji:

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ść ? 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 )

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

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…

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

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

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

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

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

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

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

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

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() !

Biblioteki : ASP.NET Caching Stan sesji – właściwy model <%@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

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

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

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

.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

.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 ) 

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

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/

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

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

… dziękuję za uwagę - pytania ?

Serdecznie dziękuję za uwagę…