Es ist sehr einfach, Hello World in C# mit einer IDE wie Visual Studio zu schreiben, aber können Sie Hello World ohne IDE ausdrucken? Das bedeutet nicht, ohne IDE zu arbeiten, sondern das Ausführungsmodell von CLR zu lernen.
1. Erstellen Sie einen neuen Notizblock, geben Sie den folgenden Code ein und speichern Sie ihn als HelloWorld.txt.
using System; namespace HelloWorld { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); Console.ReadKey(); } } }
2. Öffnen Sie das Eingabeaufforderungsprogramm Visual Studio 2008 (2005, 2010)
3. Wechseln Sie in das Verzeichnis von HelloWorld.txt
4. Führen Sie den Befehl aus: csc /out:Hello.exe HelloWorld.txt
Wenn nichts Unerwartetes passiert, wird Hello.exe kompiliert und Hello World kann gedruckt werden.
Der Ausführungsprozess eines CLR-Programms ist grob in zwei Schritte unterteilt, den Kompilierungszeitraum und den Laufzeitzeitraum. Der Kompilierungszeitraum ist ungefähr wie folgt:
Der Kompilierungszeitraum kann auch logisch in zwei Schritte unterteilt werden:
1. Der CLR-Compiler (C#) akzeptiert Quellcodedateien und kompiliert sie in verwaltete Module. Das verwaltete Modul umfasst IL-Code, Metadaten, CLR-Header und andere Komponenten. Im obigen Beispiel wird HelloWorld.txt in ein verwaltetes Modul kompiliert.
2. Im Allgemeinen enthält eine Assembly viele Quellcodedateien (hier gibt es nur HelloWorld.txt) und Ressourcendateien. Der zweite Schritt besteht darin, die entsprechenden Kompilierungsergebnisse jeder Quellcodedatei und Ressourcendatei in einer Assembly zusammenzuführen.
Führen Sie die beiden oben genannten Schritte aus, um eine XX.dll- oder XX.exe-Assembly zu erhalten, genau wie die Hello.exe oben.
Woher weiß der Compiler, ob er in ein verwaltetes Modul oder eine Ressourcendatei kompilieren soll? Dies entspricht dem Generierungsvorgang der Dateiattribute von Visual Studio Klicken Sie mit der rechten Maustaste auf die Datei einer beliebigen Visual Studio-Lösungsressourcenlösung -->Eigenschaften-->Build-Vorgang:
Geben Sie Klasse1 als eingebettete Ressource an. Wenn Sie sie mit ILSpy überprüfen, werden Sie feststellen, dass Klasse1 nur in der Assembly eingebettet ist, mit dem Namen: Namespace:
Sie können sogar ein Bild so einstellen, dass es kompiliert wird, und den Compiler versuchen lassen, es zu kompilieren, er meldet jedoch einen Fehler.
Laufzeit
1. Überprüfen Sie die Sicherheitsmerkmale der Baugruppe
2. Speicherplatz im Speicher zuweisen
3. Senden Sie den ausführbaren Code in der Assembly an den JIT-Compiler und kompilieren Sie einen Teil davon in nativen Code (CPU-Anweisungen).
Der ausführbare Code der Assembly wird bei Bedarf vom JIT-Compiler kompiliert, und dann wird der native Code (CPU-Anweisungen) für die spätere Ausführung im Programm zwischengespeichert. Sobald die Anwendung beendet wird, wird auch der kompilierte native Code verworfen.
Wenn Sie beispielsweise den obigen Code ändern in:
Die erste WriteLine muss zuerst JIT-kompiliert und dann ausgeführt werden. Da der WriteLine-Code kompiliert wurde, führt die zweite WriteLine den Code direkt im Speicherblock aus und überspringt die JIT-Kompilierung.static void Main(string[] args) { Console.WriteLine("Hello"); Console.WriteLine("World!"); Console.ReadKey(); }
Aufgrund der Speicherzuweisung, des JIT-Kompilierungsprozesses usw. verursacht das Programm beim ersten Ausführen einen gewissen Leistungsverlust. Dieses Gefühl ist besonders deutlich, wenn das Drücken von F5 lange dauert Die Homepage wird angezeigt.
Lassen Sie uns diesen Prozess unten simulieren und erleben. Verwenden Sie eine Reihe von Klassen, um die Speicherzuweisungszeit zu verlängern. Weitere Informationen finden Sie in dieser Datei HelloWorld.cs:
Führen Sie den Befehl erneut aus: csc /out:Hello.exe HelloWorld.txt, um Hello.exe abzurufen. Während der Ausführung wird festgestellt, dass es eine gewisse Verzögerung gibt, bevor Hello World gedruckt wird.
Generieren Sie nativen Code
1. Beschleunigen Sie die Startgeschwindigkeit von Anwendungen. Da der Code zu nativem Code kompiliert wird, ist kein Zeitaufwand für die Kompilierung zur Laufzeit erforderlich.
2. Reduzieren Sie die Anwendungsassembly. Wenn eine Assembly von mehreren Prozessen gleichzeitig geladen wird, kompiliert NGen.exe die IL zu nativem Code und speichert ihn in einer separaten Datei. Auf diese Weise kann es durch „Speicherzuordnung“ mehreren Prozessen gleichzeitig zugeordnet werden, um den Code gemeinsam zu nutzen und zu vermeiden, dass jeder Prozess eine Kopie des Codes hat.
Führen Sie das Eingabeaufforderungsprogramm von Visual Studio 2008 (2005, 2010) erneut aus
Führen Sie den folgenden Befehl aus: ngen install Hello.exe:
Nachdem der Befehl abgeschlossen ist (auf meinem Rechner dauert es etwa 10 Sekunden, er wird erst abgeschlossen, wenn der Befehl erneut eingegeben werden kann), führen Sie Hello.exe aus und Sie werden feststellen, dass Hello World sofort und ohne Verzögerung ausgedruckt werden kann.
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung von Hello World in C#, das ohne IDE geschrieben werden kann (Bild). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!