.NET CLR ist eine Laufzeitumgebung, die den in einer beliebigen .NET-Programmiersprache geschriebenen Code verwaltet und ausführt. CLR ist die virtuelle Maschinenkomponente des .NET Frameworks. Der Compiler dieser Sprache kompiliert den Quellcode von Anwendungen, die mit .NET-kompatiblen Sprachen entwickelt wurden, in die Zwischensprache der CLR namens MSIL, d. h. Microsoft Intermediate Language Code. Dieser Code ist plattformunabhängig. Es ist vergleichbar mit Bytecode in Java. Metadaten werden auch während der Kompilierung und des MSIL-Codes generiert und in einer Datei gespeichert, die als Manifestdatei bezeichnet wird. Bei diesen Metadaten geht es im Allgemeinen um Mitglieder und Typen, die CLR zum Ausführen von MSIL-Code benötigt. Eine Just-in-Time-Compiler-Komponente von CLR konvertiert MSIL-Code in nativen Code der Maschine. Dieser Code ist plattformabhängig. CLR verwaltet Speicher, Threads, Ausnahmen, Codeausführung, Codesicherheit, Überprüfung und Kompilierung.
Latextisch
Die folgende Abbildung zeigt die Konvertierung von Quellcode in nativen Code.
Die obige Abbildung wandelt Code in nativen Code um, den die CPU ausführen kann.
Die Hauptkomponenten von CLR sind:
- Gemeinsames Typensystem
- Gemeinsame Sprachspeziation
- Müllsammler
- Just-in-Time-Compiler
- Metadaten und Assemblys
1. Gemeinsames Typensystem:
CTS stellt Richtlinien für die Deklaration, Verwendung und Verwaltung von Datentypen zur Laufzeit bereit. Es bietet sprachübergreifende Kommunikation. Beispielsweise verfügt VB.NET über einen Ganzzahl-Datentyp und C# über einen Int-Datentyp zum Verwalten von Ganzzahlen. Nach der Kompilierung wird Int32 von beiden Datentypen verwendet. Daher stellt CTS die Datentypen mithilfe von verwaltetem Code bereit. Ein gemeinsames Typsystem hilft beim Schreiben von sprachunabhängigem Code.
Es bietet zwei Kategorien von Typen.
2. Gemeinsame Sprachspezifikation (CLS):
Die Common Language Specification (CLS) enthält eine Reihe von Regeln, die von allen NET-unterstützten Sprachen befolgt werden müssen. Die gemeinsamen Regeln erleichtern die Implementierung der Sprachintegration und helfen bei der sprachübergreifenden Vererbung und beim Debuggen. Jede von NET Framework unterstützte Sprache verfügt über eigene Syntaxregeln. Aber CLS gewährleistet die Interoperabilität zwischen Anwendungen, die mit NET-Sprachen entwickelt wurden.
3. Müllabfuhr:
Garbage Collector ist eine Komponente von CLR, die als automatischer Speichermanager fungiert. Es hilft bei der Speicherverwaltung, indem es Speicher entsprechend den Anforderungen automatisch zuweist. Es weist Objekten Heap-Speicher zu. Wenn Objekte nicht verwendet werden, wird der ihnen zugewiesene Speicher für die zukünftige Verwendung zurückgefordert. Es gewährleistet auch die Sicherheit von Objekten, indem es einem Objekt nicht erlaubt, den Inhalt eines anderen Objekts zu verwenden.
4. Just-in-Time-Compiler (JIT):
Der JIT-Compiler ist eine wichtige Komponente von CLR. Es wandelt den MSIL-Code in nativen Code (d. h. maschinenspezifischen Code) um. Das .NET-Programm wird entweder explizit oder implizit kompiliert. Der Entwickler oder Programmierer ruft einen bestimmten Compiler auf, um das Programm in der expliziten Kompilierung zu kompilieren. Bei der impliziten Kompilierung wird das Programm zweimal kompiliert. Der Quellcode wird beim ersten Kompilierungsprozess in Microsoft Intermediate Language (MSIL) kompiliert. Im zweiten Kompilierungsprozess wird der MSIL-Code in nativen Code umgewandelt. Dieser Vorgang wird als JIT-Kompilierung bezeichnet. Es gibt drei Arten von JIT-Compilern: Pre, Econo und Normal. Der Pre-JIT-Compiler kompiliert vor der Ausführung den gesamten MSIL-Code in nativen Code. Der Econo JIT Compiler kompiliert nur die Teile des MSIL-Codes, die während der Ausführung benötigt werden, und entfernt die Teile, die nicht mehr benötigt werden. Der normale JIT-Compiler kompiliert außerdem nur die Teile des MSIL-Codes, die während der Ausführung erforderlich sind, legt sie jedoch für die zukünftige Verwendung im Cache ab. Es ist keine Neukompilierung bereits verwendeter Teile erforderlich, da diese im Cache-Speicher abgelegt wurden.
5. Metadaten:
Bei Metadaten handelt es sich um binäre Informationen über das Programm, die entweder in einer CLR Portable Executable-Datei (PE) zusammen mit MSIL-Code oder im Speicher gespeichert sind. Während der Ausführung von MSIL werden auch Metadaten in den Speicher geladen, um Klassen und verwandte Klassen richtig zu interpretieren. Im Code verwendete Informationen. Metadaten helfen also dabei, Code sprachneutral zu implementieren oder Sprachinteroperabilität zu erreichen.
6. Versammlungen:
Eine Assembly ist eine grundlegende Einheit der physischen Codegruppierung. Es besteht aus dem Assembly-Manifest, Metadaten, MSIL-Code und einer Reihe von Ressourcen wie Bilddateien. Es wird auch als grundlegende Bereitstellungseinheit, Versionskontrolle, Wiederverwendung, Sicherheitsberechtigungen usw. betrachtet.
.NET CLR-Funktionen
Im Folgenden sind die Funktionen der CLR aufgeführt.
- Es wandelt das Programm in nativen Code um.
- Behandelt Ausnahmen
- Bietet Typsicherheit
- Speicherverwaltung
- Bietet Sicherheit
- Verbesserte Leistung
- Sprachunabhängig
- Plattformunabhängig
- Müllabfuhr
- Bietet Sprachfunktionen wie Vererbung, Schnittstellen und Überladung für objektorientierte Programme.
Der Code, der mit CLR ausgeführt wird, wird als verwalteter Code bezeichnet, während der Code außerhalb der CLR als nicht verwalteter Code bezeichnet wird. Die CLR bietet außerdem eine Interoperabilitätsschicht, die die Interoperabilität sowohl verwalteter als auch nicht verwalteter Codes ermöglicht.
1. Verwalteter Code:
Jede im .NET Framework geschriebene Sprache ist verwalteter Code. Verwalteter Code verwendet CLR, das sich um Ihre Anwendungen kümmert, indem es den Speicher verwaltet, die Sicherheit übernimmt, sprachübergreifendes Debuggen ermöglicht usw. Der Prozess des verwalteten Codes ist in der Abbildung dargestellt:
2. Nicht verwalteter Code:
Der außerhalb des .NET-Frameworks entwickelte Code wird als nicht verwalteter Code bezeichnet. Anwendungen, die nicht unter der Kontrolle der CLR ausgeführt werden, werden als nicht verwaltet bezeichnet. Bestimmte Sprachen wie C++ können zum Schreiben solcher Anwendungen verwendet werden, beispielsweise für Low-Level-Zugriffsfunktionen des Betriebssystems. Hintergrundkompatibilität mit VB, ASP und COM sind Beispiele für nicht verwalteten Code. Dieser Code wird mit Hilfe von Wrapper-Klassen ausgeführt. Der nicht verwaltete Codeprozess ist unten dargestellt:
.NET CLR-Versionen
Die CLR aktualisiert sich von Zeit zu Zeit, um eine bessere Leistung bereitzustellen.
.NET-Version | CLR-Version |
---|---|
1,0 | 1,0 |
1.1 | 1.1 |
2,0 | 2,0 |
3,0 | 2,0 |
3.5 | 2,0 |
4 | 4 |
4.5 | 4 |
4.6 | 4 |
4.6 | 4 |
.NET CLR-Struktur
Im Folgenden finden Sie die Komponentenstruktur von Common Language Runtime.
Unterstützung der Basisklassenbibliothek
Es handelt sich um eine Klassenbibliothek, die Klassen für die .NET-Anwendung unterstützt.
Thread-Unterstützung
Es verwaltet die parallele Ausführung der Multithread-Anwendung.
COM-Marshaller
Es sorgt für die Kommunikation zwischen den COM-Objekten und der Anwendung.
Sicherheits-Engine
Es erzwingt Sicherheitsbeschränkungen.
Debug-Engine
Es ermöglicht Ihnen, verschiedene Arten von Anwendungen zu debuggen.
Typprüfer
Es überprüft die in der Anwendung verwendeten Typen und stellt sicher, dass sie den von der CLR bereitgestellten Standards entsprechen.
Code-Manager
Es verwaltet Code zur Ausführungslaufzeit.
Müllsammler
Es gibt den ungenutzten Speicher frei und weist ihn einer neuen Anwendung zu.
Ausnahmebehandler
Es behandelt die Ausnahme zur Laufzeit, um Anwendungsfehler zu vermeiden.
ClassLoader
Es wird verwendet, um alle Klassen zur Laufzeit zu laden.