logo

.NET Common Language Runtime (CLR)

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

Net Common Language Runtime

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
Net Common Language Runtime

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.

    Werttyp:Ein Werttyp speichert die Daten im Speicher, der auf dem Stapel oder inline in einer Struktur zugewiesen ist. Diese Typkategorie enthält das Datenverzeichnis. Wenn der Wert einer Variablen in eine andere kopiert wird, speichern beide Variablen unabhängig voneinander Daten. Dabei kann es sich um integrierte, benutzerdefinierte oder Aufzählungstypen handeln. Integrierte Typen sind primitive Datentypen wie numerisch, boolesch, char und Datum. Benutzer im Quellcode erstellen benutzerdefinierte Typen. Eine Aufzählung bezieht sich auf eine Reihe von Aufzählungswerten, die durch Beschriftungen dargestellt, aber als numerischer Typ gespeichert werden.
    Net Common Language Runtime Referenztyp:Ein Referenztyp speichert einen Verweis auf den Wert einer Speicheradresse und wird auf dem Heap zugewiesen. Heap-Speicher wird für die dynamische Speicherzuweisung verwendet. Der Referenztyp enthält keine tatsächlichen Daten direkt, sondern die Adresse der Daten. Immer wenn ein Referenztypobjekt erstellt wird, kopiert es die Adresse und nicht die tatsächlichen Daten. Daher beziehen sich zwei Variablen auf dieselben Daten. Wenn Daten eines Referenztypobjekts geändert werden, wirkt sich dies auch auf das andere Objekt aus. Referenztypen können selbstbeschreibende Typen, Zeigertypen oder Interferenztypen sein. Bei den selbstbeschreibenden Typen kann es sich um String-, Array- und Klassentypen handeln, die Metadaten über sich selbst speichern.

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:

Net Common Language Runtime

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 Common Language Runtime

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

Net 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.