logo

.NET Common Language Runtime (CLR)

.NET CLR er et runtime-miljø, der administrerer og udfører koden skrevet i ethvert .NET-programmeringssprog. CLR er den virtuelle maskine-komponent i .NET frameworket. Det sprogs compiler kompilerer kildekoden for applikationer udviklet ved hjælp af .NET-kompatible sprog til CLRs mellemsprog kaldet MSIL, dvs. Microsoft mellemsprogkode. Denne kode er platformsuafhængig. Det kan sammenlignes med byte-kode i java. Metadata genereres også under kompilering og MSIL-kode og gemmes i en fil kendt som Manifest-filen. Disse metadata handler generelt om medlemmer og typer, der kræves af CLR for at udføre MSIL-kode. En just-in-time compiler komponent af CLR konverterer MSIL kode til native kode for maskinen. Denne kode er platformsafhængig. CLR administrerer hukommelse, tråde, undtagelser, kodeudførelse, kodesikkerhed, verifikation og kompilering.

python ny linje

Følgende figur viser konverteringen af ​​kildekode til indbygget kode.

Net Common Language Runtime

Ovenstående figur konverterer kode til native kode, som CPU'en kan udføre.

Hovedkomponenterne i CLR er:

  • Fælles type system
  • Fælles sprogart
  • Skraldemand
  • Just in Time Compiler
  • Metadata og samlinger
Net Common Language Runtime

1. Almindelig type system:

CTS giver retningslinjer for deklaration, brug og styring af datatyper under kørsel. Det tilbyder kommunikation på tværs af sprog. For eksempel har VB.NET en heltalsdatatype, og C# har en int-datatype til styring af heltal. Efter kompilering bruges Int32 af begge datatyper. Så CTS leverer datatyperne ved hjælp af administreret kode. Et almindeligt typesystem hjælper med at skrive sproguafhængig kode.

Det giver to kategorier af typer.

    Værditype:En værditype gemmer dataene i hukommelsen allokeret på stakken eller inline i en struktur. Denne kategori af Type indeholder databiblioteket. Hvis en variabels værdi kopieres til en anden, lagrer begge variable data uafhængigt. Det kan være af indbyggede typer, brugerdefinerede eller opregningstyper. Indbyggede typer er primitive datatyper som numerisk, boolsk, char og dato. Brugere i kildekoden opretter brugerdefinerede typer. En opregning refererer til et sæt af opregnede værdier repræsenteret af etiketter, men gemt som en numerisk type.
    Net Common Language Runtime Referencetype:En referencetype gemmer en reference til værdien af ​​en hukommelsesadresse og allokeres på heapen. Heap-hukommelse bruges til dynamisk hukommelsesallokering. Referencetype indeholder ikke faktiske data direkte, men indeholder dataadressen. Når der laves et referencetypeobjekt, kopierer det adressen og ikke faktiske data. Derfor vil to variabler referere til de samme data. Hvis data for et referencetypeobjekt ændres, afspejles det samme for det andet objekt. Referencetyper kan være selvbeskrivende typer, pointertyper eller interferenstyper. De selvbeskrivende typer kan være streng-, array- og klassetyper, der gemmer metadata om sig selv.

2. Fælles sprogspecifikation (CLS):

Common Language Specification (CLS) indeholder et sæt regler, der skal følges af alle NET-understøttede sprog. De fælles regler gør det nemt at implementere sprogintegration og hjælper med arv og fejlfinding på tværs af sprog. Hvert sprog, der understøttes af NET Framework, har sine egne syntaksregler. Men CLS sikrer interoperabilitet mellem applikationer udviklet ved hjælp af NET-sprog.

3. Affaldsopsamling:

Garbage Collector er en komponent i CLR, der fungerer som en automatisk memory manager. Det hjælper med at administrere hukommelsen ved automatisk at allokere hukommelse i henhold til kravet. Det allokerer heap-hukommelse til objekter. Når objekter ikke er i brug, genvinder det den hukommelse, der er tildelt dem, til fremtidig brug. Det sikrer også objekters sikkerhed ved ikke at tillade en genstand at bruge indholdet af en anden genstand.

4. Just in Time (JIT) Compiler:

JIT Compiler er en vigtig komponent i CLR. Den konverterer MSIL-koden til native kode (dvs. maskinspecifik kode). .NET-programmet er kompileret enten eksplicit eller implicit. Udvikleren eller programmøren kalder en bestemt compiler for at kompilere programmet i den eksplicitte kompilering. I implicit kompilering kompileres programmet to gange. Kildekoden kompileres i Microsoft Intermediate Language (MSIL) under den første kompileringsproces. MSIL-koden konverteres til native kode i den anden kompileringsproces. Denne proces kaldes JIT-kompilering. Der er tre typer JIT-kompilere - Pre, Econo og Normal. Pre JIT Compiler kompilerer hele MSIL-koden til native kode før udførelse. Econo JIT Compiler kompilerer kun de dele af MSIL-koden, der kræves under udførelse og fjerner de dele, der ikke længere er nødvendige. Normal JIT Compiler kompilerer også kun de dele af MSIL-koden, der kræves under udførelse, men placerer dem i cachen til fremtidig brug. Det kræver ikke genkompilering af allerede brugte dele, da de er blevet placeret i cachehukommelsen.

5. Metadata:

En metadata er en binær information om programmet, enten gemt i en CLR Portable Executable-fil (PE) sammen med MSIL-kode eller i hukommelsen. Under udførelsen af ​​MSIL bliver metadata også indlæst i hukommelsen for korrekt fortolkning af klasser og relaterede. Information brugt i kode. Så metadata hjælper med at implementere kode på en sprogneutral måde eller opnå sproglig interoperabilitet.

6. Samlinger:

En samling er en grundlæggende enhed af fysisk kodegruppering. Det består af assembly-manifestet, metadata, MSIL-kode og et sæt ressourcer som billedfiler. Det betragtes også som en grundlæggende installationsenhed, versionskontrol, genbrug, sikkerhedstilladelser osv.

.NET CLR-funktioner

Følgende er funktionerne i CLR.

  • Det konverterer programmet til native kode.
  • Håndterer undtagelser
  • Giver typesikkerhed
  • Hukommelseshåndtering
  • Giver sikkerhed
  • Forbedret ydeevne
  • Sprog uafhængig
  • Platform uafhængig
  • Dagrenovation
  • Giver sprogfunktioner såsom nedarvning, grænseflader og overbelastning til objektorienterede programmer.

Den kode, der kører med CLR, kaldes managed code, hvorimod koden uden for CLR kaldes unmanaged code. CLR giver også et interoperabilitetslag, som gør det muligt for både de administrerede og ikke-administrerede koder at fungere sammen.

1. Administreret kode:

Ethvert sprog, der er skrevet i .NET frameworket, er administreret kode. Administreret kode bruger CLR, som passer på dine applikationer ved at administrere hukommelse, håndtere sikkerhed, tillade fejlsøgning på tværs af sprog osv. Processen med administreret kode er vist i figuren:

Net Common Language Runtime

2. Ikke-administreret kode:

Koden udviklet uden for .NET frameworket er kendt som uadministreret kode. Programmer, der ikke kører under kontrol af CLR, siges at være uadministrerede. Visse sprog såsom C++ kan bruges til at skrive sådanne applikationer, såsom lav-niveau adgangsfunktioner i operativsystemet. Baggrundskompatibilitet med VB, ASP og COM er eksempler på ikke-administreret kode. Denne kode udføres ved hjælp af wrapper-klasser. Den ikke-administrerede kodeproces er vist nedenfor:

Net Common Language Runtime

.NET CLR-versioner

CLR opdaterer sig selv fra tid til anden for at give bedre ydeevne.

.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

Følgende er komponentstrukturen af ​​Common Language Runtime.

Net Common Language Runtime

Base Class Library Support

Det er et klassebibliotek, der understøtter klasser til .NET-applikationen.

Trådstøtte

Det styrer den parallelle udførelse af multi-threaded-applikationen.

COM Marshaler

Det giver kommunikation mellem COM-objekterne og applikationen.

Sikkerhedsmotor

Det håndhæver sikkerhedsrestriktioner.

Debug Engine

Det giver dig mulighed for at debugge forskellige slags applikationer.

Skriv Checker

Den kontrollerer de anvendte typer i applikationen og verificerer, at de matcher standarderne fra CLR.

Kode Manager

Det administrerer kode ved kørselstid.

Skraldemand

Den frigiver den ubrugte hukommelse og allokerer den til en ny applikation.

Undtagelsesbehandler

Den håndterer undtagelsen under kørsel for at undgå programfejl.

ClassLoader

Det bruges til at indlæse alle klasser under kørsel.