.NET CLR is een runtime-omgeving die de code beheert en uitvoert die in elke .NET-programmeertaal is geschreven. CLR is de virtuele machinecomponent van het .NET-framework. De compiler van die taal compileert de broncode van applicaties die zijn ontwikkeld met behulp van .NET-compatibele talen in de tussentaal van CLR genaamd MSIL, dat wil zeggen de tussentaalcode van Microsoft. Deze code is platformonafhankelijk. Het is vergelijkbaar met bytecode in Java. Metagegevens worden ook gegenereerd tijdens het compileren en MSIL-code en opgeslagen in een bestand dat bekend staat als het Manifest-bestand. Deze metagegevens gaan over het algemeen over leden en typen die CLR nodig heeft om MSIL-code uit te voeren. Een just-in-time compilercomponent van CLR converteert MSIL-code naar native code van de machine. Deze code is platformafhankelijk. CLR beheert geheugen, threads, uitzonderingen, code-uitvoering, codeveiligheid, verificatie en compilatie.
np.uniek
De volgende afbeelding toont de conversie van broncode naar native code.
De bovenstaande figuur converteert code naar native code, die de CPU kan uitvoeren.
De belangrijkste componenten van CLR zijn:
- Gemeenschappelijk type systeem
- Gemeenschappelijke taalspeciatie
- Vuilnisman
- Just in Time-compiler
- Metagegevens en samenstellingen
1. Gemeenschappelijk typesysteem:
CTS biedt richtlijnen voor het declareren, gebruiken en beheren van gegevenstypen tijdens runtime. Het biedt communicatie in meerdere talen. VB.NET heeft bijvoorbeeld een gegevenstype geheel getal, en C# heeft een gegevenstype int voor het beheren van gehele getallen. Na compilatie wordt Int32 door beide gegevenstypen gebruikt. CTS levert dus de gegevenstypen met behulp van beheerde code. Een gemeenschappelijk typesysteem helpt bij het schrijven van taalonafhankelijke code.
Het biedt twee categorieën typen.
2. Gemeenschappelijke taalspecificatie (CLS):
Common Language Specification (CLS) bevat een reeks regels die door alle NET-ondersteunde talen moeten worden gevolgd. De gemeenschappelijke regels maken het eenvoudig om taalintegratie te implementeren en helpen bij het overerven en debuggen van meerdere talen. Elke taal die door NET Framework wordt ondersteund, heeft zijn eigen syntaxisregels. Maar CLS zorgt voor interoperabiliteit tussen applicaties die zijn ontwikkeld met behulp van NET-talen.
3. Afvalinzameling:
Garbage Collector is een onderdeel van CLR dat werkt als een automatische geheugenbeheerder. Het helpt bij het beheren van het geheugen door automatisch geheugen toe te wijzen op basis van de vereisten. Het wijst heap-geheugen toe aan objecten. Wanneer objecten niet in gebruik zijn, wordt het toegewezen geheugen teruggevorderd voor toekomstig gebruik. Het garandeert ook de veiligheid van objecten door het ene object niet toe te staan de inhoud van een ander object te gebruiken.
4. Just in Time (JIT)-compiler:
JIT Compiler is een belangrijk onderdeel van CLR. Het converteert de MSIL-code naar native code (dat wil zeggen machinespecifieke code). Het .NET-programma wordt expliciet of impliciet gecompileerd. De ontwikkelaar of programmeur roept een bepaalde compiler aan om het programma in de expliciete compilatie te compileren. Bij impliciete compilatie wordt het programma tweemaal gecompileerd. De broncode wordt tijdens het eerste compilatieproces gecompileerd in Microsoft Intermediate Language (MSIL). De MSIL-code wordt tijdens het tweede compilatieproces omgezet in native code. Dit proces wordt JIT-compilatie genoemd. Er zijn drie soorten JIT-compilers: Pre, Econo en Normal. Pre JIT Compiler compileert volledige MSIL-code naar native code voordat deze wordt uitgevoerd. Econo JIT Compiler compileert alleen die delen van MSIL-code die nodig zijn tijdens de uitvoering en verwijdert die delen die niet meer nodig zijn. Normale JIT Compiler compileert ook alleen die delen van MSIL-code die nodig zijn tijdens de uitvoering, maar plaatst deze in de cache voor toekomstig gebruik. Het vereist geen hercompilatie van reeds gebruikte onderdelen, aangezien deze in het cachegeheugen zijn geplaatst.
5. Metagegevens:
Metagegevens zijn binaire informatie over het programma, opgeslagen in een CLR Portable Executable-bestand (PE) samen met MSIL-code of in het geheugen. Tijdens de uitvoering van MSIL worden ook metadata in het geheugen geladen voor een juiste interpretatie van klassen en aanverwante zaken. Informatie gebruikt in code. Metagegevens helpen dus om code op een taalneutrale manier te implementeren of taalinteroperabiliteit te bereiken.
6. Assemblages:
Een assembly is een fundamentele eenheid voor het groeperen van fysieke code. Het bestaat uit het assemblagemanifest, metadata, MSIL-code en een reeks bronnen zoals afbeeldingsbestanden. Het wordt ook beschouwd als een basisimplementatie-eenheid, versiebeheer, hergebruik, beveiligingsmachtigingen, enz.
.NET CLR-functies
Hieronder volgen de functies van de CLR.
- Het converteert het programma naar native code.
- Verwerkt uitzonderingen
- Biedt typeveiligheid
- Geheugen management
- Biedt veiligheid
- Verbeterde prestatie
- Taalonafhankelijk
- Platformonafhankelijk
- Afvalinzameling
- Biedt taalfuncties zoals overerving, interfaces en overbelasting voor objectgeoriënteerde programma's.
De code die met CLR wordt uitgevoerd, wordt beheerde code genoemd, terwijl de code buiten de CLR onbeheerde code wordt genoemd. De CLR biedt ook een interoperabiliteitslaag, waardoor zowel de beheerde als de onbeheerde codes kunnen samenwerken.
1. Beheerde code:
Elke taal die in het .NET-framework is geschreven, is beheerde code. Beheerde code maakt gebruik van CLR, dat voor uw toepassingen zorgt door het geheugen te beheren, de beveiliging af te handelen, foutopsporing in meerdere talen mogelijk te maken, enz. Het proces van beheerde code wordt weergegeven in de afbeelding:
2. Onbeheerde code:
De code die buiten het .NET-framework is ontwikkeld, staat bekend als onbeheerde code. Applicaties die niet onder controle van de CLR draaien, worden onbeheerd genoemd. Bepaalde talen zoals C++ kunnen worden gebruikt om dergelijke toepassingen te schrijven, zoals toegangsfuncties op laag niveau van het besturingssysteem. Achtergrondcompatibiliteit met VB, ASP en COM zijn voorbeelden van onbeheerde code. Deze code wordt uitgevoerd met behulp van wrapper-klassen. Het onbeheerde codeproces wordt hieronder weergegeven:
.NET CLR-versies
De CLR wordt van tijd tot tijd bijgewerkt om betere prestaties te leveren.
.NET-versie | CLR-versie |
---|---|
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-structuur
Hieronder volgt de componentenstructuur van Common Language Runtime.
Ondersteuning voor basisklassebibliotheek
Het is een klassenbibliotheek die klassen voor de .NET-applicatie ondersteunt.
Draadondersteuning
Het beheert de parallelle uitvoering van de multi-threaded applicatie.
COM-maarschalk
Het zorgt voor communicatie tussen de COM-objecten en de applicatie.
Beveiligingsmotor
Het dwingt veiligheidsbeperkingen af.
Debug-engine
Hiermee kunt u verschillende soorten toepassingen debuggen.
Type controleur
Het controleert de typen die in de applicatie worden gebruikt en verifieert dat ze overeenkomen met de normen van de CLR.
Codebeheerder
Het beheert code tijdens uitvoeringsruntime.
Vuilnisman
Het geeft het ongebruikte geheugen vrij en wijst het toe aan een nieuwe applicatie.
Uitzonderingsbehandelaar
Het verwerkt de uitzondering tijdens runtime om applicatiefouten te voorkomen.
Klasselader
Het wordt gebruikt om alle klassen tijdens runtime te laden.