首頁 後端開發 C#.Net教程 不用IDE也能寫出C#的Hello World詳解(圖)

不用IDE也能寫出C#的Hello World詳解(圖)

Mar 10, 2017 am 11:24 AM

用Visual Studio等IDE寫C#的Hello World非常簡單,但脫離了IDE你能不能打印出Hello World呢?這不是說工作時脫離IDE,而是學習一下CLR的執行模型.

 Hello World

  1、新建一個記事本,輸入如下程式碼,另存為HelloWorld.txt。

using System;
namespace HelloWorld
{
   class Program
   {
        static void Main(string[] args) {
            Console.WriteLine("Hello World!");
            Console.ReadKey();
        }
    }
}
登入後複製

  2、開啟Visual Studio 2008(2005,2010) 命令提示程式

不用IDE也能寫出C#的Hello World詳解(圖)

#   3、切換到HelloWorld.txt的目錄

# 不用IDE也能寫出C#的Hello World詳解(圖)

#   4、執行指令:csc /out:Hello.exe HelloWorld.txt

# 不用IDE也能寫出C#的Hello World詳解(圖)

#   如無意外,將會編譯出Hello.exe,能列印出Hello World。

 CLR執行模型-編譯期

#   CLR程式的執行過程大致分為兩步,編譯期與運行期,編譯期過程大致如下圖:

不用IDE也能寫出C#的Hello World詳解(圖)

#   其中編譯期邏輯上也可分為兩步驟:

#   1、CLR(C#)編譯器接受原始碼文件,並編譯為託管模組。託管模組包括IL程式碼、元資料、CLR頭等組成部分。上面的範例中就是將HelloWorld.txt編譯成託管模組。

  2、一般程序集都會包含很多原始碼文件(這裡只有HelloWorld.txt)和資源文件,第二步就是把各個原始碼文件和資源文件對應編譯結果合併成組件。

  執行上面兩步驟就可以得到一個XX.dll或XX.exe的組件,就像上面的Hello.exe。

  編譯器如何知道要編譯成託管模組還是資源檔?其實是必須明確告訴編譯器每個檔案的怎麼編譯,這個對應Visual Studio的檔案屬性的生成操作.

  右鍵點選任何Visual Studio解決資源方案的檔案-->屬性-->產生操作:

不用IDE也能寫出C#的Hello World詳解(圖)

#   指定Class1為嵌入的資源,用ILSpy查看會發現只是把Class1嵌入到程式集中,名稱為:命名空間.檔案名稱:

不用IDE也能寫出C#的Hello World詳解(圖)

#   你甚至可以將一張圖片設為編譯讓編譯器試圖去編譯它,不過會報錯。

 運行期

  上面產生了程式集,程式集內的是IL程式碼,它還不是可執行的程式碼。 IL是與CPU無關的機器語言,直到組件被調用,才會由JIT(Just-in-Time,實時)編譯器編譯為本機碼(CPU指令)。在運行時,CLR執行以下步驟:

#   1、檢查組件的安全特性;

  2、在記憶體中分配空間;

  3、把程式集中的可執行程式碼傳送給JIT編譯器,把其中一部分編譯成本機碼(CPU指令)。

  程式集的可執行程式碼在需要的時候由JIT編譯器編譯,然後本機程式碼(CPU指令)就被快取以備後來的程式中執行。一旦應用程式終止,編譯好的本機程式碼也會被丟棄。

  例如如果將上面的程式碼改為:

static void Main(string[] args) {
    Console.WriteLine("Hello");
    Console.WriteLine("World!");
    Console.ReadKey();
}
登入後複製

  第一個WriteLine需要先JIT編譯,再執行。而由於已編譯WriteLine的程式碼,所以第二個WriteLine會直接執行記憶體區塊中的程式碼,跳過JIT編譯。

  由於分配記憶體、JIT編譯過程等,所以程式會在第一次運行時造成一些效能損失,寫ASP.NET時這種感覺特變明顯,按了F5會等很久才會顯示首頁。

  下面模擬感受這個過程。用一大堆類別延長記憶體分配的時間,參考這個檔案HelloWorld.cs:

# 不用IDE也能寫出C#的Hello World詳解(圖)

#   再次執行指令:csc /out:Hello.exe HelloWorld.txt,得到Hello.exe,執行時發現有一定的延遲才會列印出Hello World。

 生成本機代碼

#   使用.NET提供的NGen.exe,可以將IL程式碼編譯成本機程式碼,可以解決上面的問題。 NGen.exe有兩個作用:

  1、加快應用程式的啟動速度。因為程式碼已編譯為本機程式碼,運行時不需要再花時間編譯。

  2、減少應用程式的組件。如果一個程式集會同時載入多個進程,NGen.exe會將IL編譯成本機程式碼,並儲存到一個單獨的檔案中。這樣就可以透過"記憶體映射"的方式,同時映射到多個進程中,使程式碼共享,避免每個進程一份程式碼。

  再次執行 Visual Studio 2008(2005,2010) 命令提示程式

  執行以下指令:ngen install Hello.exe:

不用IDE也能寫出C#的Hello World詳解(圖)   

#   指令完成(在我的機器大概要10秒左右,到能再次輸入指令才完成)後,執行Hello.exe會發現馬上就能列印出Hello World,沒有任何延遲。

以上是不用IDE也能寫出C#的Hello World詳解(圖)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1324
25
PHP教程
1272
29
C# 教程
1251
24
使用 C# 的活動目錄 使用 C# 的活動目錄 Sep 03, 2024 pm 03:33 PM

使用 C# 的 Active Directory 指南。在這裡,我們討論 Active Directory 在 C# 中的介紹和工作原理以及語法和範例。

C# 中的隨機數產生器 C# 中的隨機數產生器 Sep 03, 2024 pm 03:34 PM

C# 隨機數產生器指南。在這裡,我們討論隨機數產生器的工作原理、偽隨機數和安全數的概念。

C# 資料網格視圖 C# 資料網格視圖 Sep 03, 2024 pm 03:32 PM

C# 資料網格視圖指南。在這裡,我們討論如何從 SQL 資料庫或 Excel 檔案載入和匯出資料網格視圖的範例。

C# 中的階乘 C# 中的階乘 Sep 03, 2024 pm 03:34 PM

C# 階乘指南。這裡我們討論 C# 中階乘的介紹以及不同的範例和程式碼實作。

c#多線程和異步的區別 c#多線程和異步的區別 Apr 03, 2025 pm 02:57 PM

多線程和異步的區別在於,多線程同時執行多個線程,而異步在不阻塞當前線程的情況下執行操作。多線程用於計算密集型任務,而異步用於用戶交互操作。多線程的優勢是提高計算性能,異步的優勢是不阻塞 UI 線程。選擇多線程還是異步取決於任務性質:計算密集型任務使用多線程,與外部資源交互且需要保持 UI 響應的任務使用異步。

C# 中的模式 C# 中的模式 Sep 03, 2024 pm 03:33 PM

C# 模式指南。在這裡,我們討論 C# 中模式的介紹和前 3 種類型,以及其範例和程式碼實作。

C# 中的質數 C# 中的質數 Sep 03, 2024 pm 03:35 PM

C# 質數指南。這裡我們討論c#中素數的介紹和範例以及程式碼實作。

xml怎麼改格式 xml怎麼改格式 Apr 03, 2025 am 08:42 AM

可以採用多種方法修改 XML 格式:使用文本編輯器(如 Notepad )進行手工編輯;使用在線或桌面 XML 格式化工具(如 XMLbeautifier)進行自動格式化;使用 XML 轉換工具(如 XSLT)定義轉換規則;或者使用編程語言(如 Python)進行解析和操作。修改時需謹慎,並備份原始文件。

See all articles