20
Tomasz Kostarski

CLR na platformie .NET

  • Upload
    nelia

  • View
    61

  • Download
    0

Embed Size (px)

DESCRIPTION

CLR na platformie .NET. Tomasz Kostarski. O czym będzie?. Co to jest CLR? Obsługa typów danych (CTS i Pakowanie) Zarządzanie pamięcią (Odzyskiwanie i Finalizatory) Wspólna specyfikacja języka (CLS) Kod zarządzalny (MSIL, Metadane, Podzespoły, Wykonywanie kodu). Co to jest CLR?. - PowerPoint PPT Presentation

Citation preview

Page 1: CLR na platformie .NET

Tomasz Kostarski

Page 2: CLR na platformie .NET

O czym będzie?Co to jest CLR?Obsługa typów danych (CTS i Pakowanie)Zarządzanie pamięcią (Odzyskiwanie i

Finalizatory)Wspólna specyfikacja języka (CLS)Kod zarządzalny (MSIL, Metadane,

Podzespoły, Wykonywanie kodu)

Page 3: CLR na platformie .NET

Co to jest CLR?Wspólne środowisko uruchomieniowe (Common Language Runtime)Wybór kompilatora dla językaKompilacja do MSILWykonanie kodu zarządzanego

Page 4: CLR na platformie .NET

Obsługa typów danychRóżne języki, różna składniaPodobne podstawowe pojęcia:

Liczba całkowitaNapisZbieranie kodu w metodyGrupowanie danych i metod w klasy

Page 5: CLR na platformie .NET

CTS - Wspólny zestaw typów danychCommon Type SystemZestaw typów, niezależny od składni językaKażdy język zgodny z CLR musi używać chociaż

części typów z CTS, ale może mieć dowolną składnię

W każdym języku można definiować własne typy danych spoza CTS

Typy skalarne i referencyjne, wszystkie dziedziczą po Object

Wszystkie typy skalarne to typy proste, na stosie pamiętamy ich wartość

Typy referencyjne przechowują na stosie wskaźnik do swych wartości umieszczonych gdzieś w pamięci

Page 6: CLR na platformie .NET

Najważniejsze typy danych w CTS

Page 7: CLR na platformie .NET

Pakowanie (boxing)Konwersja typów skalarnych na typy referencyjneUżywane np. przy przekazywaniu wartości skalarnej

do metody oczekującej typu referencyjnego

Możliwa powtórna konwersja przez rozpakowanie

Większość języków z CLR wykonuje to automatycznie

Oczywisty wpływ na wydajność

Page 8: CLR na platformie .NET

Zarządzanie pamięciąPamięć dla danych przydzielana na stosie lub

stercie – zmienne skalarne lub referencyjnePamięć ze stosu zwalniana jest automatyczniePamięć ze sterty po zapełnieniu zwalnia

odśmiecacz (garbage collector)GC działa automatycznie, nie zaleca się

jawnego uruchamiania go w aplikacji

Page 9: CLR na platformie .NET

Odzyskiwanie pamięci1. Tworzenie aktualnej listy „osiągalnych” obiektów2. Usuwanie obiektów spoza listy3. Porządkowanie sterty w spójny blok zajętej

pamięci4. Poprawianie istniejących odwołań

Najwięcej śmieci wśród najmłodszych obiektów Najstarsze obiekty przesuwane są ku końcowi

sterty Odśmiecanie najmłodszych obiektów, a jeśli

nadal brakuje pamięci przeglądanie starszych

Page 10: CLR na platformie .NET

Przed:

Po:

Page 11: CLR na platformie .NET

FinalizatoryKażdy obiekt na stercie posiada finalizator

(domyślnie pusty)Kiedy GC znajdzie obiekt do usunięcia umieszcza

go na liście oczekujących na finalizacjęPo przeszukaniu całej pamięci, dla każdego

obiektu z listy wykonuje się jego finalizatorFinalizator to nie destruktor – nie wiadomo kiedy i

czy się wykona (aplikacja może zakończyć się wcześniej)

Dla ważnych czynności sprzątających lepiej stworzyć odpowiednią metodę

Page 12: CLR na platformie .NET

CLS - Wspólna specyfikacja językaCommon Language SpecificationWywołanie kodu napisanego w jednym języku, z

kodu napisanego w innymWymaga to obsługi w różnych językach typów

danych w ten sam sposóbOkreśla jak duży podzbiór CTS musi byś

zaimplementowany w języku, by osiągnąć zgodność

Niektóre wymagania: obsługa większości typów skalarnych, najniższy indeks w tablicy musi być zerem

Page 13: CLR na platformie .NET

Kod zarządzanyKompilatory zamieniają kod źródłowy

napisany w dowolnym języku na:Kod wykonywalny zapisany w MSILMetadane, czyli informacje na temat kodu

wykonywalnego i danych przez niego używanych

W czasie wykonania aplikacji, CLR tłumaczy kod MSIL na kod natywny procesora

Ta konwersja daje możliwość zarządzania wykonaniem aplikacji, stąd nazwa

Page 14: CLR na platformie .NET

MSIL - standardowy język pośredniMicrosoft Intermediate LanguageKod podobny do zestawu instrukcji procesoraPolecenia MSIL bazują bezpośrednio na

pojęciach zdefiniowanych w CTSKod źródłowy z języków wyższego poziomu,

kompilowany jest do wspólnego kodu pośredniego

Dodatkowa warstwa abstrakcji daje nam potencjalną przenośność

Możliwość sprawdzenia bezpieczeństwa typów przed uruchomieniem

Page 15: CLR na platformie .NET

MetadaneSzczegółowy opis typów zdefiniowanych w

kodzie zarządzanym, z którym są związanePrzechowywane w tym samym pliku co kod

MSILOpisują między innymi: nazwy typów, zasięgi,

po kim dziedziczy, interfejsy, metody, obsługiwane zdarzenia

Z metadanych korzysta funkcja IntelliSense w Visual Studio .NET

W metadanych opisane są też atrybuty

Page 16: CLR na platformie .NET

Podzespoły/Złożenia (assembly)Aplikacja składa się z różnych plików,

kod/grafika/tekstGrupowanie plików stanowiących jeden logiczny

moduł, udostępniający określoną funkcjonalnośćManifest – odpowiednik metadanych dla pojedynczego

podzespołu, zawiera: nazwę podzespołu (może to być nazwa silna),numer wersji podzespołu (wspólny i taki sam dla

wszystkich modułów, które stanowią podzespół), informacje na temat kultury (lub języka) obsługiwanej

przez podzespół, listę wszystkich plików, które stanowią podzespół, wraz

z ich sumami kontrolnymi, listę innych wymaganych do pracy podzespołów wraz z

numerami ich wersji.

Page 17: CLR na platformie .NET

Podzespoły c.d.Silna nazwa – unikatowa w całym systemieW CLR nazwa typu danych, to nazwa nadana

+ nazwa podzespołu w którym został zdefiniowany

Większość podzespołów to pojedynczy plik DLL

Instalacja podzespołu to po prostu skopiowanie plików nie wymaga dodania wpisów do rejestru

Page 18: CLR na platformie .NET

Wykonywanie kodu zarządzanegoPrzy uruchomieniu aplikacji, potrzebne podzespoły

są odnajdywane i ładowane do pamięciJeśli aplikacja nie wywoła żadnej metody z

podzespołu, nie zostanie on w ogóle załadowanyPodzespoły są najpierw szukane w GAC (Global

Assembly Cache) - globalna pamięć podręczna podzespołów, dopiero później w innych miejscach

Po załadowaniu podzespołów potrzebna jest jeszcze ich kompilacja z MSIL na kod natywny

Page 19: CLR na platformie .NET

Dwie metody kompilacji1. JIT (just-in-time compilation) - kompilacją w samą

porę Każda metoda kompilowana jest dopiero w czasie

pierwszego uruchomienia Kompilacja następuje przy każdym uruchomieniu

aplikacji

2. Przy użyciu NGEN (Native Image Generator) Kompiluje kod całego podzespołu do kodu binarnego Kod maszynowy umieszczany jest w pamięci podręcznej

obrazów kodu natywnego (Native Image Cache) Pozwala to na szybsze uruchamianie aplikacji

Page 20: CLR na platformie .NET

KONIEC

www.microsoft.comŹródła