激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - 不用IDE寫C#的Hello World的方法

不用IDE寫C#的Hello World的方法

2021-11-01 13:30C#教程網 C#

這篇文章主要介紹了不用IDE寫C#的Hello World的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

用visual studio等ide寫c#的hello world非常簡單,但脫離了ide你能不能打印出hello world呢?這不是說工作時脫離ide,而是學習一下clr的執行模型.

hello world

新建一個記事本,輸入如下代碼,另存為helloworld.txt.

?
1
2
3
4
5
6
7
8
9
10
11
using system; 
namespacehelloworld 
  classprogram 
  
    static voidmain(string[] args) { 
      console.writeline("hello world!"); 
      console.readkey(); 
    
  
}

打開visual studio 2008(2005,2010) 命令提示程序

不用IDE寫C#的Hello World的方法

卻換到helloworld.txt的目錄

不用IDE寫C#的Hello World的方法

運行命令:csc /out:hello.exe helloworld.txt

不用IDE寫C#的Hello World的方法

如無意外,將會編譯出hello.exe,能打印出hello world.

clr執行模型-編譯期

clr程序的執行過程大致分為兩步,編譯期和運行期,編譯期過程大致如下圖:

不用IDE寫C#的Hello World的方法

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

clr(c#)編譯器接受源代碼文件,并編譯為托管模塊.托管模塊包括il代碼,元數據,clr頭等組成部分.上面的例子中就是將helloworld.txt編譯成托管模塊.

一般程序集都會包含很多源代碼文件(這里只有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執行如下步驟:

◆ 檢查程序集的安全特性;

◆ 在內存中分配空間;

◆ 把程序集中的可執行代碼發送給jit編譯器,把其中一部分編譯成本機代碼(cpu指令).

程序集的可執行代碼在需要的時候由jit編譯編譯,然后本機代碼(cpu指令)就被緩存以備后來的程序中執行.一旦應用程序終止,編譯好的本機代碼也會被丟棄.

例如如果將上面的代碼改為:

?
1
2
3
4
5
static void main(string[] args) {
  console.writeline("hello");
  console.writeline("world!");
  console.readkey();
}

第一個writeline需要先jit編譯,再執行.而由于已編譯writeline的代碼,所以第二個writeline會直接執行內存塊中的代碼,跳過jit編譯.

由于分配內存,jit編譯過程等,所以程序會在第一次運行時造成一些性能損失,寫asp.net時這種感覺特變明顯,按了f5會等很久才會顯示首頁.

下面模擬感受這個過程.用一大堆類延長內存分配的時間,參考這個文件helloworld.css(博客園不支持txt格式):

不用IDE寫C#的Hello World的方法

再次運行命令:csc /out:hello.exe helloworld.txt,得到hello.exe,執行時發現有一定的延遲才會打印出hello world.

生成本機代碼

使用.net提供的ngen.exe,可以將il代碼編譯成本機代碼.可以解決上面的問題.ngen.exe有兩個作用:

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

減少應用程序的程序集.如果一個程序集會同時加載多個進程.ngen.exe會將il編譯成本機代碼,并保存到一個單獨的文件中.這樣就可以通過"內存映射"的方式,同時映射到多個進程中,使代碼共享.避免每個進程一份代碼.

再次運行visual studio 2008(2005,2010) 命令提示程序

運行如下命令:ngen install hello.exe:

不用IDE寫C#的Hello World的方法

命令完成(在我的機器大概要10秒左右,到能再次輸入命令才完成)后運行hello.exe會發現馬上就能打印出hello world,沒有任何延遲.

對于asp.net,microsoft另外提供了aspnet_compiler.exe,我們可以在asp.net程序建一個腳本(.bat)預編譯程序.以下是一個示例(from老趙的程序):

%systemroot%\microsoft.net\framework\v2.0.50727\aspnet_compiler -v / -p .\mymvcdemo.web.ui -f -errorstack .\compliled 
pause
關于aspnet_compiler.exe不多介紹,感興趣的可以自己搜索相關資料.

延伸 · 閱讀

精彩推薦
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
主站蜘蛛池模板: 成人三级电影在线 | 一级国产航空美女毛片内谢 | 久久精品免费网站 | 97中文| 亚洲欧美爱爱 | 国产精品一区二区三区在线播放 | 欧美亚洲一级 | 亚洲性视频 | 成人毛片免费看 | chinese中国真实乱对白 | 欧美xxxwww| 中文字幕免费看 | 欧美在线a| 暖暖免费观看高清完整版电影 | 欧美成a人片在线观看久 | 久久草在线看 | 欧美一级黄色免费看 | 麻豆视频免费网站 | 成人福利电影在线观看 | 精品国产一区二区三区久久久蜜 | 免费网址黄| 成人国产精品免费 | 一区二区三区视频在线观看 | 欧美日韩成人一区二区 | 国产午夜精品一区二区三区在线观看 | 中文字幕国产亚洲 | 亚洲男人的天堂在线视频 | 久久久久久麻豆 | 午夜视频在线观看免费视频 | 天天黄色片 | 亚洲国产精久久久久久久 | 黄免费观看视频 | 久久成人午夜视频 | 精品国产一区二区久久 | 精品久久久久久成人av | 国产高清美女一级毛片久久 | 97porn| 色婷婷久久久久久 | 干色视频 | 天天艹综合| 欧美亚洲国产成人综合在线 |