.NET
Colin Fahey
1. Definition von .NET
„.NET“ Der Begriff bezieht sich auf die folgende Sammlung von Technologien:
(1) Framework Class Library (FCL)
(2) Intermediate Language (IL)
(3) Common Language Runtime (CLR)
1.1 Framework Class Library (FCL)
Die Framework Class Library (FCL) ist eine umfangreiche Sammlung von Klassen zu unterstützen:
* Container (Array, String, List, ...)
* Multithreading (Threads, Thread-Pools)
* Vernetzung (Sockets, Protokolle, Clients und Server)
* Datei-Operationen
* Daten-Streams
* Parsing (reguläre Ausdrücke, XML Handling)
* Mathematische Operationen
* Ausnahmebehandlung
* Sprache Features (Reflexion, Stack-Trace, dynamische Code)
Die Framework Class Library (FCL) umgesetzt wird für viele verschiedene Plattformen ( Windows, Linux, MacOS, ... ).
So kann ein einziges Programm, welches benutzt die Framework Class Library (FCL) entwickelt werden können ohne nennenswerte Kenntnisse über die Unterschiede zwischen den Ziel-Plattformen.
Die Framework Class Library (FCL) enthält nützliche Modelle der grundlegenden Konzepte der Informatik (z. B. „Fäden, Steckdose, Strom,“ etc.).
In gewissem Sinn ist die Framework Class Library (FCL) gibt jedem Betriebssystem unterstützt eine moderne, auf hohem Niveau, konsistente Programmier-Schnittstelle.
Die Framework Class Library (FCL) ist eines der modernsten, umfassend, einheitlich gestaltete, gut dokumentierte Sammlung von Funktionen und Datentypen zur Verfügung Programmierer.
Leider sind die folgenden Multimedia-Aspekte sind nicht Teil des Framework Class Library (FCL): Audio-Aufzeichnung, Wiedergabe Audio-, Video-Aufnahme, Wiedergabe von Videos, 3D-Rendering, Joystick-Eingang, Gerätesteuerung ( CD/DVD, ... ) usw.
Microsoft hat eine .NET Version des DirectX Bibliotheken für ihre Windows Betriebssystem.
Es gibt C# Wrapper für OpenGL, OpenAL, GLUT, SDL, etc., aber dies ist nicht ganz so bequem wie mit solchen Multimedia-Funktionen werden in den Kernbereichen Framework Class Library (FCL) und in die End-User „Runtime-Bibliotheken.“
Eines der Probleme bei der Entwicklung von Programmen, die Bibliotheken vor allem darin, dass die geplante Reihe von End-Nutzern wird eine Unterstützung für die ausgewählten Bibliotheken.
Ist dies nicht der Fall bequem zum Download und Installation der notwendigen Bibliotheken, eine End-User könnte man sich dort nicht ein Programm verwenden, die diese Bibliotheken.
Ein Endbenutzer kann auch nur widerwillig zu warten, eine Bibliothek zum Herunterladen aus einer Online-Standort.
Wenn ein Programm Entwickler erfordert eine End-User zu finden, erwerben und installieren Bibliotheken, alle ohne Unterstützung durch ein bestimmtes Programm, dann die Endbenutzer könnte man sich dort nicht mit dem Programm.
Zum Beispiel, viele Open-Source-Projekte erfordern Endnutzer zu finden, zu laden und zu installieren, zu viele verschiedene Bibliotheken aus anderen Open-Source-Projekte (Beispiele: openssl, zlib, libpng, libjpg, glut, ...), die ist an der Zeit, Konsum-, kompliziert, frustrierend, und dazu führen, dass die Endnutzer der Wahl, um die Suche nach alternativen Programmen oder Produkte.
Die „Windows Update“ Service scheinbar hilft einsetzen Version 1.1 der .NET Laufzeit-Bibliotheken, um Windows Benutzer.
Diese Laufzeit-Bibliotheken sind in der Windows XP Betriebssystem.
Daher ist die Schaffung Windows Programme, die .NET 1.1 scheint ganz vernünftig.
Auch die Laufzeit-Bibliotheken für Microsoft's Implementierungen der .NET Framework Class Library (FCL) darf frei weitergegeben, so dass Entwickler können diese Bibliotheken an Endabnehmer, nicht bereits die Bibliotheken.
Die Windows Vista Betriebssystem Schiffe mit der .NET 3.0 Laufzeit-Bibliotheken (eine Kombination der .NET Framework Class Libraries und mehrere neue Bibliotheken wie die „Windows Presentation Foundation“ (WPF)).
Daher ist die Bereitstellung von .NET 2.0 und .NET 3.0 Programme für Windows Vista ist es nicht erforderlich, die Installateure für den .NET Laufzeit-Bibliotheken.
1.2 Intermediate Language (IL)
Die Intermediate Language (IL) ist eine kleine Reihe von einfachen, Prozessor-unabhängige, Betriebssystem-unabhängigen Anweisungen, die ausreichen, um vollständig ausdrücken die Daten Strukturen und Funktionen von vielen verschiedenen High-Level Programmiersprachen ( C++, C#, F#, Visual Basic, Java, Ocaml, ... ).
Source-Code in einer Hochsprache kompiliert werden kann, bis eine entsprechende „Intermediate Language“ Form.
Code in einem „Intermediate Language“ Form kann leicht kombinierbar mit anderen Code in „Intermediate Language“ Form.
Ein Computerprogramm (auch „Software)“ können Quellcode geschrieben in verschiedenen Hochsprachen (zB C#, C++ und Visual Basic).
Alle Source-Code kompiliert werden kann (umgerechnet) zu einem „Intermediate Language“ Format zu ermöglichen eine einfache Kombination mit anderen kompilierten Code.
Programme in einem „Intermediate Language“ Form umgewandelt wird in der Regel zu-Maschine-spezifische Anweisungen (zB CPU Anweisungen) sehr kurz vor der Ausführung (zB „Just-In-Time“ (JIT) Umwandlung von IL zu CPU Anleitung).
Aber das Programm kann auch ausgeführt werden im Rahmen eines Virtual Machine (VM) der Auslegung Intermediate Language (IL) Anweisungen.
Code geschrieben in verschiedenen Hochsprachen ( C#, F#, Ocaml, C++, Visual Basic, ... ), kompiliert werden kann, dass Intermediate Language (IL) Form mit einem entsprechenden Compiler in beliebigen unterstützten Plattform ( Windows, Linux, MacOS X, ... ), und die daraus resultierende Datei mit eingebetteten Intermediate Language (IL) Code ist Plattform-unabhängig und ausführen können auf jeder Plattform mit einem Umsetzung der .NET Common Language Runtime (CLR).
Die Intermediate Language (IL) Code generiert durch den Compiler ist im Wesentlichen unabhängig von der Plattform, auf der der Compiler ausgeführt wurde.
1.3 Common Language Runtime (CLR)
Die Common Language Runtime (CLR) ist der Mechanismus für die Ausführung von Code in der Intermediate Language (IL) Form.
Die Common Language Runtime (CLR) bietet verschiedene Dienste an.
Die Common Language Runtime (CLR) Die Umrechnung kann Intermediate Language (IL) Code auf Anweisungen, die native zu der Plattform (zB CPU Anleitung).
Die Umstellung von der Intermediate Language (IL) zu Plattform-spezifischen (zB CPU-spezifisch) Anweisungen kann vorkommen, im Voraus von jeder Ausführung (dh, ein „Ahead-Of-Time“ (AOT) Wandlung), oder auch schrittweise geschehen, da das Programm ausführt (dh „Just-In-Time“ (JIT) Konvertierung) .
Die Just-In-Time (JIT) Konvertierung können sich entwickelnden Statistiken über die Ausführung des Programmes zu optimieren, die dynamisch-Code umgewandelt (Beispiel: die Ermittlung häufig verwendeten Loops und Niederlassungen, und die Optimierung von ihnen nach beobachtete Verhalten (die sich abhängig von aktuellen Daten und Ereignisse)).
Die Common Language Runtime (CLR) verwaltet allozierten Speicher im Namen des Programms.
Daher ist die CLR sorgt dafür, dass das Programm nicht scheitern zu allozierten Speicher zugreifen, während Verweise auf solche Speicher weiterhin besteht, und stellt sicher, dass Speicher Zuweisungen storniert werden, und dass der Speicher wieder zur Verfügung gestellt für die künftige Zuteilung nach dem Programm verfügt über alle Verweise auf solche Zuweisungen .
Die Common Language Runtime (CLR) erkennt, wenn das Programm nicht mehr hat einen Verweis auf eine Speicherzuweisung und die Speicherzuweisung ist markiert für deallocation.
Die Common Language Runtime (CLR) nutzt jede aus einer Vielzahl von „Garbage Collection“ Algorithmen (Beispiel: „mark-and-sweep“) zu identifizieren und zurückfordern Speicher-Blöcke nicht mehr zugänglich ist ein Programm.
Die Common Language Runtime (CLR) Griffe Programm Ausnahmen.
Die Common Language Runtime (CLR) erzwingt Sicherheitsrichtlinien.
Die Common Language Runtime (CLR) nutzt die „P/Invoke“ Mechanismus zum Laden Plattform-spezifischen Bibliotheken und aufrufen (Call) Funktionen innerhalb dieser Bibliotheken.
2. .NET ( FCL, IL, CLR ) Implementierungen von Microsoft
2.1 Einleitung
Die .NET Paradigma ( FCL, IL, CLR ) wurde umgesetzt durch die Microsoft.
Die neueste Version, „3.0“, wurde im 2006.10.
.NET 3.0 besteht aus den .NET 2.0 Framework Class Libraries und mehrere neue Bibliotheken, wie zum Beispiel die „Windows Presentation Foundation“ (WPF) im Zusammenhang mit der „Silverlight“ (vormals WPF/E, ehemals Sparkle, ...) Browser-Plugin für Firefox und Internet Explorer.
Microsoft teilt die .NET 2.0 Software in zwei verschiedenen Paketen:
(1) .NET Framework Version 2.0 Redistributable Package
Die Redistributable Package benötigt der Endnutzer zu Programme ausführen gebaut für die .NET Paradigma. Dieses Paket muss auch installiert werden, von den Entwicklern vor der Installation und Verwendung der .NET Software Development Kit (SDK) aufgeführt.
(2) .NET Framework Version 2.0 Software Development Kit
Die Software Development Kit (SDK) benötigt, von den Entwicklern zu kompilieren C# Quellcode zu Intermediate Language (IL) program files.
Dieses Paket enthält verschiedene Entwicklungs-Tools und Dokumentation.
2.2 .NET Framework Version 2.0 Redistributable Package
Die Redistributable Package benötigt der Endnutzer zu Programme ausführen gebaut für die .NET Paradigma.
Dieses Paket muss auch installiert werden, von den Entwicklern vor der Installation und Verwendung der .NET Software Development Kit (SDK) aufgeführt.
Die folgenden Internet-Seite ist das wichtigste .NET Download-Seite:
Der Abschnitt namens „.NET Framework Version 2.0 Redistributable Package“ hat Links zu drei Hardware-Plattformen: „Download x86 version“, „Download x64 version“, „Download IA64 version“.
Zum Beispiel, im Anschluss an die „Download x86 version“ Link führt zu einer Seite berechtigt „Microsoft .NET Framework Version 2.0 Redistributable Package (x86)“
(Dateiname: dotnetfx.exe; Version: RC1; Veröffentlichungsdatum: 3/22/2006; Sprache: Englisch; Downloadgröße: 22.4 MB)
Lokal zwischengespeicherte Version (nur für Referenzzwecke; möglicherweise veraltet):
(Der Dateiname geändert wurde hier aus dem ursprünglichen Dateinamen „dotnetfx.exe“ vermeiden verwirrend es mit der Version 1.1 Installer auch namens „dotnetfx.exe“.)
2.3 .NET Framework Version 2.0 Software Development Kit (SDK)
Die Software Development Kit (SDK) benötigt, von den Entwicklern zu kompilieren C# Quellcode zu Intermediate Language (IL) program files.
Dieses Paket enthält verschiedene Entwicklungs-Tools und Dokumentation.
Die folgenden Internet-Seite ist das wichtigste .NET Download-Seite:
Der Abschnitt namens „.NET Framework Version 2.0 Software Development Kit“ hat Links zu drei Hardware-Plattformen: „Download x86 version“, „Download x64 version“, „Download IA64 version“.
Zum Beispiel, im Anschluss an die „Download x86 version“ Link führt zu einer Seite berechtigt „.NET Framework 2.0 Software Development Kit (SDK) (x86)“
(Dateiname: setup.exe; Version: 2.0; Veröffentlichungsdatum: 11/7/2005; Sprache: Englisch; Downloadgröße: 354.0 MB)
Lokal zwischengespeicherte Version (nur für Referenzzwecke; möglicherweise veraltet):
(Der Dateiname geändert wurde hier aus dem ursprünglichen Dateinamen „setup.exe“ vermeiden verwirrend es mit allen anderen Installations-Dateien mit den Namen „setup.exe“.)
3. Microsoft Visual C#: ein Integrated Development Environment (IDE) Programm
3.1 Einleitung
Ein Integrated Development Environment (IDE) Programm ermöglicht ein Entwickler zu bearbeiten Source-Code ausführen und verschiedene Werkzeuge (Beispiele: Compiler, Debugger, ...) im Rahmen eines einzigen, die Vereinheitlichung Programm, gefüllt mit nützlichen Hinweisen und visuelle Kontrollen.
„Microsoft Visual C# 2005 Express Edition“ ist ein no-Kosten (keine Zahlung erforderlich) IDE zum Download zur Verfügung Microsoft.
Für Nicht-Datenbank-Entwicklung, ist es fast unmöglich, diese Unterscheidung nicht-Cost-Produkt aus dem Einzelhandel Gegenstück, „Microsoft Visual C# 2005“.
Ich häufig Verwendung beider Produkte, professionell und Freizeit, und ich habe noch nicht bemerkt, jede praktische Unterschied zwischen den Produkten.
3.2 Offizielle Links
Die Internet-Site der Hauptseite:
Die Seite über „Visual C# Express Edition“:
Klicken Sie auf die Schaltfläche „Download Now“ auf der rechten Seite der Seite zu wählen, eine Download-Möglichkeit.
(Eine Methode besteht darin, eine Installer-Programm wird der Download von Dateien aus Microsoft während jeder Installation.
Eine zweite Methode ist, um eine vollständige CD-ROM „ISO“ Bild, die Zukunft ermöglicht Offline-Installation.
Die ISO Bild, „VCS.iso“ (451,837,952 Bytes; CRC 55884F2C) für 32-Bit-x86 Englisch ist, kann gebrannt werden zu einem CD-ROM mit „Nero 7 Ultra“, zum Beispiel. )
4. .NET ( FCL, IL, CLR ) Umsetzung durch die Mono Project
4.1 Einleitung
Die .NET Paradigma ( FCL, IL, CLR ) umgesetzt wurde von den Teilnehmern in einer Gruppe bekannt als die Mono Project.
4.2 Offizielle Links
Projekt-Website:
Software-Download-Seite:
4.3 Lokal zwischengespeicherte Version
Lokal zwischengespeicherte Version des Installers (nur für Referenzzwecke; möglicherweise veraltet):
4.4 .NET 2.0 Entwicklung mit Mono
Die „mcs“ Compiler, und die Dokumentation, Stand: November 2006, die meisten beziehen sich auf C# 1.0 und FCL 1.1.
Allerdings ist die „mcs“ Compiler in der Lage ist, zu kompilieren C# 2.0 Code, der nicht enthalten oder Generika Generika-basierten Funktionen, sondern schränkt die API zu 1.0.
Gehen Sie volle C# 2.0 Entwicklung, mit FCL 2.0 Bibliotheken, verwenden Sie die „gmcs“ Compiler.
Siehe folgende Seite auf der Website Mono:
5. SharpDevelop: eine Open-Source-Programm Integrated Development Environment (IDE)
5.1 Einleitung
Ein Integrated Development Environment (IDE) Programm erlaubt ein Entwickler zu bearbeiten Source-Code ausführen und verschiedene Werkzeuge (Beispiele: Compiler, Debugger, ...) im Rahmen eines einzigen, die Vereinheitlichung Programm, gefüllt mit nützlichen Hinweisen und visuelle Kontrollen.
SharpDevelop ist ein ausgezeichneter Open-Source-Programm IDE für C# / .NET Entwicklung.
Diese IDE ähnelt der Microsoft Visual C# IDE, und in einigen Punkten, die SharpDevelop IDE verbessert hat, auf die Microsoft Produkt.
Allerdings Microsoft Visual C# hat einige Features (Beispiel: Debugging), dass die SharpDevelop Programm nicht haben (zum Zeitpunkt, als dies geschrieben wurde).
5.2 Offizielle Links
Der einfache Internet-Seite der Hauptseite:
Die Seite über „The Open Source Development Environment for .NET“:
Die Download-Seite, hat die Einzelheiten über die 1.1 und 2.0 Versionen von SharpDevelop:
5.3 Lokal zwischengespeicherte Version
Lokal zwischengespeicherte Version des Installers (nur für Referenzzwecke; möglicherweise veraltet):
6. Nützliche C# / .NET / IL Werkzeuge
6.1 SciTech Software „.NET Memory Profiler“
Dies zeigt Profiler Speicher Zuweisungen und andere Ressourcen-Zuteilung, dass ein Programm kompiliert .NET oder Montage macht während der Ausführung.
Die Echtzeit-Grafik ermöglicht eine Person zu sehen, im Detail, wie die Aktionen des Programms (wie zB Aktionen, die von Benutzereingaben oder andere Ereignisse) beeinflussen Speicherzuweisung und garbage collection.
Die Echtzeit-Tabelle mit Blick ermöglicht eine Person zu erfahren Details über Speicher-Zuweisungen.
Diese Profiler sofort und dramatisch, zeigte verschwenderischen Speicher Verwendung in einer Echtzeit-Direct3D Programm, das von mir entwickelt hatte.
Ein Muster des ansteigenden Rampen und plötzliche Tropfen (wegen „Garbage Collection)“ in den Speicherverbrauch Grafiken passen perfekt mit regelmäßigen, sehr kurze Pausen in der 3D-Zeichnung von meinem Programm.
Der Profiler ermöglicht mir zu entdecken, dass häufige Vergabe von temporären Objekte ansammeln, war eine Menge Speicher, Auslösung Garbage Collection häufig, und dabei genug Zeit für jede Garbage Collection zu verursachen einige Zeichnung Zeiten zu vergessen.
Die Profiler-Echtzeit-Tabelle der zugeordneten Objekttypen ergeben, die Art der Gegenstände, die verbraucht die meisten Speicher und die Zuweisungen verbraucht Speicher in der höchsten Rate (Bytes pro Sekunde), und die Zuweisungen hatte die höchste Rate zur Verfügung.
Studium der Echtzeit-Grafiken, und die Echtzeit-Tabellen, ermöglichte es mir, sich auf die Untersuchung der Art und Weise, wie bestimmte Datentypen verwendet wurden in meinem Code.
Ändern von Code vermeiden häufigen Zuweisungen des vorübergehenden Objekte können erheblich reduzieren ist das Gesamtniveau der Speicherzuordnung und-entsorgung, und kann daher die Verringerung der Häufigkeit der Garbage Collection auslösen.
(Ich glaube, „Bytes/sec“ ist ein sehr aufschlussreich Statistik für die Echtzeit-Speicher verwenden, zusätzlich zu „Live instances“.
) Sehen alle diese aktualisiert werden sehr schnell in einer Tabelle Format und in der Lage zu entscheiden, wie Zeilen werden sortiert, und die Änderung der Sortierung Parameter zu jeder Zeit, macht die Erfahrung des Studiums ein Echtzeit-Programm sehr ansprechend und informativ.
Memory Allocation Antworten auf die Interaktion der Nutzer mit einem laufenden Programm kann untersucht werden, und die Prüfung kann sich rasch anzupassen, um das Feedback zu schmal down-die meisten interessanter Aspekt.
(Zum Beispiel, die 2006 July Version hatte die folgenden Attribute: Version 2.6.89; 4.3 MB; USA $127.00; Download 14-Tage-Limit-Version, ohne Kosten, für die Bewertung.)
6.2 FxCop: .NET Code Analyzer / Kritiker
FxCop analysiert eine kompilierte .NET Programm (oder kompiliert Montage) und generiert einen Bericht Auflistung möglicher Probleme mit dem ursprünglichen Quellcode.
Mögliche Performance-Probleme und Sicherheitsprobleme identifiziert werden.
Mögliche Verstöße gegen Codierung Konvention identifiziert werden.
FxCop ist es nicht erforderlich, den Zugang zu den ursprünglichen Quellcode für die Durchführung der Analyse.
Nur das Programm kompiliert .NET (enthält IL) ist erforderlich.
Dennoch ist die FxCop Bericht bietet Hyperlinks zu spezifischen Zeilennummern in den ursprünglichen Quellcode.
Wenn die Microsoft Visual C# 2005 IDE aktiv ist, klicken Sie auf den Hyperlink auf der FxCop Bericht wird dazu führen, dass das IDE auf Verwerfung zu den entsprechenden Quelldatei und Zeilennummer.
FxCop hat, meiner Meinung nach eine recht unangenehme Art und Weise der Integration mit der Microsoft Visual C# 2005 IDE.
Aber sobald es eingerichtet ist, FxCop produziert eine sehr interessante und potenziell wertvollen Bericht.
Der Bericht enthält eine detaillierte Hinweise zur Verbesserung der Original-Quellcode.
Ich denke, es lohnt sich zu analysieren, ein Programm mit FxCop in regelmäßigen Abständen.
Es würde mich nicht wundern, wenn einige der Software-Entwicklung Projekte oder Unternehmen alle erforderlichen Code geschrieben von Entwicklern die Ausbeute keine Warnungen oder Kritik von FxCop.
Regeln können hinzugefügt oder entfernt von der FxCop Datenbank, je nach Bedarf.
FxCop ist ein Open-Source, kostenloses Programm.
6.3 „Reflector for .NET“: Decompiler / Analyzer
Von Lutz Roeder's Internet-Site:
"Reflector is the class browser, explorer, analyzer and documentation viewer for .NET. Reflector allows to easily view, navigate, search, decompile and analyze .NET assemblies in C#, Visual Basic and IL."
„Reflector“ kann dazu beitragen, dass eine Person untersuchen, wie Drittanbieter-Bibliotheken geschrieben werden.
Manchmal wäre es sehr hilfreich zu wissen genau, wie eine Methode in einer Baugruppe umgesetzt wird.
Wenn eine Methode verhält sich in einer unerwarteten oder geheimnisvolle Art und Weise, dann „Reflector“ kann verwendet werden, sehen die Umsetzung.
Mit der Umsetzung sehen, die Programmierer arbeiten können, um Probleme aufgrund von spezifischen Implementierungen von Bibliotheks-Methoden.
Ein Freund erzählte mir, dass „Reflector“ half ihm erfahren Sie mehr über das Verhalten von schlecht dokumentierte Methoden in der Microsoft Umsetzung der Framework Class Libraries (FCL).
„Reflector“ könnte hilfreich sein, wenn Unterlagen für eine Bibliothek Methode besteht nur aus ein paar Worte, wie zum Beispiel „setzt den Wert“ oder „die Event-Handler.“
Wenn eine Bibliothek Funktion Aufruf ist nicht für einen unbekannten Grund (wenn alle Parameter scheinen gültig), dann mit „Reflector“ um die Umsetzung der Library-Funktion könnte, dass der Grund für das Scheitern.
„Reflector“ führt einige „Reverse Engineering“ eines .NET Programm oder Montage.
Andere Versorgungsunternehmen, die unter Umständen auch „Reflector“ selbst, können Ausbeute Quellcode für Programme oder Baugruppen gebaut basierend auf obfuscated Quellcode.
Dies ist offensichtlich eine Quelle der Sorge um einige Entwickler und ihre Investoren.
(2006 July: Reflector.zip war Version 4.2.45.0)
7. Internet-Diskussionsforen
Google Suche ist der beste Weg, um Antworten zu finden auf spezifische Fragen zu einem Thema, aber die Seiten unter wiederholt erscheinen in den Suchergebnissen für C# und .NET Fragen.
Die Seiten unten ist der reine Wahnsinn zum Erkunden der vielen tollen Sachen Menschen getan haben, mit C# und .NET.
„The Code Project“ Seite hat tausende von interessanten und nützlichen Artikeln, für C#, C++ und andere Sprachen und Programmierung Paradigmen.
Die „MSDN Code Gallery“ Website hat viele interessante Artikel und Code-Beispiele im Zusammenhang mit Microsoft Technologien.
Andere Internet-Seiten im Zusammenhang mit C# und .NET:
8. Allgemeine Hinweise
8.1 Plattform-Unabhängigkeit
Die Intermediate Language (IL), wie Java „Byte-Code,“ ist plattformunabhängig.
Jede .NET-konforme Compiler erzeugt plattformunabhängigen Intermediate Language (IL) Code zu Programmen oder Baugruppen.
Programme als ausführbare Datei verpackt („*.exe“-Dateien) müssen einige Plattform-abhängigen Code spezifisch für ein Betriebssystem, für die Zwecke des Seins richtig interpretiert und startete als ausführbare Software in den Kontext des jeweiligen Betriebssystems.
Allerdings ist die native ausführbare Teil der Software-Datei dient nur zum Aufrufen der .NET CLR Motor, der die Vorlage IL Code innerhalb der Software-Datei für die Ausführung von CLR Motor.
Microsoft bietet eine Implementierung der .NET Dienstprogramme (Compiler, ...), und eine Implementierung der Framework Class Library (FCL), nur für die Windows Betriebssystem.
Die Mono Project bietet Implementierungen der .NET Dienstprogramme (Compiler, ...), und Implementierungen der Framework Class Library (FCL), für die folgenden Betriebssysteme: Windows, Linux, MacOS X und BSD.
8.2 Geschwindigkeit im Vergleich mit non-CLR C / C++
Die Common Language Runtime (CLR) Aspekt der .NET ist der Kontext, in dem eine C# Programm ausführt.
Die CLR führt die „Garbage Collection“ und ermöglicht Programme, um Funktionen in „nicht verwalteten“ Bibliotheken (alle von den Bibliotheken nicht umgesetzt Intermediate Language (IL)).
Jede Funktion der mehr tut als reine Mathematik, reine String Manipulation, oder reine Speicher kopiert, ruft Funktionen in „nicht verwalteten“ Bibliotheken.
Alle Datei-Operationen, Operationen Buchse, Zeichen-Operationen, Operationen-Eingang (Maus, Tastatur), Output-Operationen (Konsole), Plattform-thread Operationen, Präzision Timer-Operationen, Windowing-Operationen, etc., ruft Funktionen in „nicht verwalteten Bibliotheken.“
Leider ist der Mechanismus der Aufruf von „unmanaged“ Funktionen aus der CLR erfordert eine erhebliche Menge an Zeit.
Daher ist die allgemeine Geschwindigkeit der Ausführung eines Programms im Rahmen der CLR ist noticably langsamer als ein Programm, können sich „nicht verwalteten“ Funktionen direkt.
Für bestimmte Arten von Software, Geschwindigkeit wichtig sein kann.
Für bestimmte Arten von Software, Geschwindigkeit können einen wichtigen Unterschied in der subjektiven oder psychologischen Erfahrung für eine Person mit der Software.
Für bestimmte Arten von Software, Geschwindigkeit kann der Unterschied zwischen einem Ziel zu erreichen und Misserfolg.
Multithreading, CPU steigenden Geschwindigkeiten und Verbesserungen an der Code-Generierung CLR Anlage sollen dazu beitragen, Software-Ausführung im Rahmen der CLR schneller ausführen.
Allerdings führt Code, der außerhalb der CLR, und beruft sich Plattform-Bibliotheken direkt, wird unweigerlich führen deutlich schneller als die Software, führt im Rahmen der CLR.
Die Zusicherungen, die von der CLR zu C# Software, wie sicher die Kluft zwischen verwaltetem Code und nicht verwalteten Code, kommt zu einem Preis, dass es unwahrscheinlich, dass gekürzt werden.
Deshalb, alle Programme, die Plattform ist sehr intensiv (Beispiele: 3D-Simulation oder Spiel, File-Prozessor, Netzwerk-Server, etc.) ist wahrscheinlich die Vollstreckung eines Größenordnung schneller außerhalb der CLR als ausgeführt, wenn innerhalb der CLR.
Der Unterschied ist enorm.
Auch alle Programme, die führt einen erheblichen Betrag von Low-Level-Manipulation von Daten deutlich schneller ausführen außerhalb der CLR als innerhalb der CLR.
Ausführung von Programmen im Rahmen der CLR führen schnell genug, um sinnvoll zu sein für viele praktische Zwecke.
Wie CPU Geschwindigkeiten steigen, und als Code nimmt besser nutzen mehrere CPUs, Programme der Ausführung im Rahmen der CLR können verwendet werden, um weitere Aufgaben, die einer hohen Rechenaufwand.
Doch mitten in 2008 der CLR ist immer noch nicht angemessen für 3D-Spiele aller Raffinesse, es sei denn, eine sehr aggressive Anstrengungen zur Verringerung der Zahl der Funktionsaufrufe auf die 3D-Bibliothek (OpenGL oder Direct3D), möglicherweise durch den Einsatz von Konzepten wie „Shader-Programme“ und „Display-Listen,“ was zur Verringerung der Zahl der Funktionsaufrufe.