精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

解析C# CLR的15個細節(jié)

開發(fā) 后端
本文整理了關(guān)于C# CLR的15個知識點。這些都是最為基本的知識,但由于現(xiàn)在大家對CLR還不是很了解,所以看起來會有一絲不理解,還是希望能給大家?guī)韼椭?/div>

本文整理了關(guān)于C# CLR的15個知識點。這些都是最為基本的知識,但由于現(xiàn)在大家對CLR還不是很了解,所以看起來會有一絲不理解,還是希望能給大家?guī)韼椭?/P>

1、C# CLR之foreach的性能問題

foreach(string s in rows) { foo(s); }的實現(xiàn)是:

  1. IEnumerator e = rows.GetEnumerator();  
  2. try {  
  3.   string s;  
  4.   while (e.MoveNext()) {  
  5.     s = (String) e.Current;  
  6.     foo(s);  
  7.   }  
  8. }  
  9. finally {  
  10.   IDisposable d = e as IDisposable;  
  11.   if (d != null) d.Dispose();  

每一步都調(diào)用了e.MoveNext()和e.Current兩個方法;而大多數(shù)時候,完全有可能優(yōu)化為一次調(diào)用。顯然這對性能是有影響的。雖然foreach對于數(shù)組作了單獨的優(yōu)化(編譯成for循環(huán)),但這還是值得注意的。

那么,怎么做比較快?

對于List等Collection,可以用ForEach(Action action),F(xiàn)indAll(Predicate match),ConvertAll(Converter converter)等方法。它們比較快,但不是所有實現(xiàn)IEnumerable的類都提供。

LINQ追求compatiblity,而不是performance。因此LINQ的實現(xiàn)完全采用了foreach。值得注意。

2、C# CLR之yield的實現(xiàn)原理

實現(xiàn)一個支持IEnumerable的對象時,一般會用到y(tǒng)ield關(guān)鍵字,這樣foreach遍歷這個對象時,可以做到lazy evaluation。例如:

  1. class MyCollection: IEnumerable<char> 
  2. {  
  3.   private string s; ...  
  4.   public IEnumerable<char> GetEnumerator()
  5.  {  
  6.     for (int i=0; i<s.Length; i++)
  7.   {  
  8.       yield return s[i];  
  9.     }  
  10.  }  

執(zhí)行到y(tǒng)ield時函數(shù)返回,下次調(diào)用時,接著上次運行的位置繼續(xù)運行。這個continuation的效果是怎么做的呢?

包含yield的函數(shù)都會被編譯器做成一個狀態(tài)機。每調(diào)一次,就接著上次的狀態(tài)繼續(xù)運行。簡單有效啊。我一直以為要有什么特殊的辦法呢。

3、C# CLR之exception handling的實現(xiàn)決定了throw的performance較差。

可以用Int32.TryParse代替try{Int32.Parse…}catch{…},稍快一點。類似地建議使用Dictionary.TryGetValue。

4、C# CLR之.Net CLR執(zhí)行引擎對應于MSCorWks.dll和MSCorEE.dll這兩個文件。

5、C# CLR之.Net 3.0, 3.5沒有對CLR作任何修改。

所有增加的東西(比如LINQ)都是syntactic sugar,只改了C#編譯器而已。

6、C# CLR之AppDomain

如果把.Net虛擬機看成一個虛擬操作系統(tǒng),AppDomain的概念則類似于操作系統(tǒng)中的進程。

可以用代碼創(chuàng)建一個AppDomain,然后動態(tài)加載/卸載assembly,還可以設置權(quán)限,相當于提供了一個沙箱。

跨AppDomain的調(diào)用類似于RPC。

調(diào)用某個AppDomain內(nèi)部的obj.foo(x)時,.net會自動幫你做出一個proxy object,你所調(diào)用的obj其實是一個proxy object。傳給foo的參數(shù)x會先被被marshal,以保證AppDomain被安全隔離。

誰用AppDomain?SQL Server用這個技術(shù)實現(xiàn)managed存儲過程。IIS會把不同的Web Application放在不同的AppDomain里,以實現(xiàn)動態(tài)裝卸。

7、C# CLR之動態(tài)載入Assembly的陷阱

Sytem.Reflection.Assembly.LoadFrom(pathName)并不會載入pathName所指定的dll,而是看看pathName那個dll的名字、版本,然后到系統(tǒng)默認位置去找。(陷阱啊)

8、C# CLR之C#里用reflection創(chuàng)建一個新對象

用Activator.CreateInstance。(奇怪的名字啊。)

9、C# CLR之C#泛型之“where”

可以用“where”來限定T的接口。例如

static T min(T arg1, T arg2) where T: IComparable {…}

不寫where的話,就不能調(diào)arg1.CompareTo(arg2)。

為啥不把T換成IComparable?一是為保證arg1, arg2一定是同一個類型,二是泛型的效率更高。(JIT會為不同類型的T各生成一份native code,從而避免了boxing)

更多where的細節(jié):

* 要想調(diào)T t1 = new T(),必須聲明where T: new()或者where T: struct

* 要寫T t2 = null,必須聲明where T: class

* T z = default(T)是一個特殊的用法,會把T的每個bit都置為0。

* 假設定義了Foo(T x, T y),則if (x==null) … 是可以通過的,雖然C#中value type的值不允許為null(例如int a=null是錯的)。這是因為,此時的語義是一致的,反正if里面的操作不被執(zhí)行就是了,所以編譯器對這種特殊情況網(wǎng)開一面。

* if (x==y)不行,除非寫了where T: baseclass。(這里我也沒理解為啥。。。>_<好像說是不知道應該用reference比較還是value比較?)

10、C# CLR之匿名函數(shù)的背后。。。

在C# 2.0以后可以用匿名的delegate,如ThreadPool.QueueWorkItem(delegate (Object obj) { Console.WriteLine(obj); })

但編譯器的實現(xiàn)會帶來一點點overhead,會生成一個小小的靜態(tài)WaitCallback對象,可以用Reflector看生成的代碼。(不要打開Reflector的optimization,否則就看不到了)

如果是自己寫的話,可以選擇每次動態(tài)建立一個WaitCallback對象然后銷毀。當然這樣做性能可能差一些,但這里的idea是:編譯器會自動做一些事,但不一定是你所希望的。在使用這些高級feature前,最好先搞清楚背后發(fā)生了什么。

另一個細節(jié):如果匿名函數(shù)中使用了外層函數(shù)的局部變量(即所謂的function closure),會導致創(chuàng)建額外的shared-state object,把用到的局部變量做成一個新對象傳給匿名函數(shù)。

上述描述同樣適用于lambda函數(shù)。因為C#的lambda函數(shù)就是匿名函數(shù),改了改語法而已。

11、C# CLR之Nullable type

雖然C#要求value type的值不能是null,但寫數(shù)據(jù)庫程序時經(jīng)常遇到某個值是null的情況。為此,C#2.0引入了Nullable type。例如,int? x = null。

int? x其實就是一個縮寫,等價于Nullable x。Nullable是預定義的一個類,簡單地對x作了封裝。(因為增加了一個類,顯然對性能稍微有點影響)

這個小改動的實現(xiàn)其實很麻煩,需要修改CLR。為什么?因為原先的x是一個value type,現(xiàn)在則變成了一個object,看這個:

  1. void M(Object o)   
  2. {  
  3.   if (o=null) {Bar();}  
  4. }  
  5. void F()  
  6. {  
  7.   int? x = null;  
  8.   M(x);  
  9. }  
  10.  

如果CLR不專門做修正的話,上面的Bar()不會被執(zhí)行。(思考題:想一想為什么~)

另外,C#還引入了一個默認值運算符“??”,稱為null-coalescing operator。

一句話,x ?? value是 (x==null) ? value: x的簡寫。

12、C# CLR之屬性(property)的簡單聲明

  1. public int x {get; private set;} 

是個很好用的句式。

注意,

  1. public int x {get;} 

是錯誤的,不能通過編譯。

13、C# CLR之Extension method

  1. //Extension method  
  2. static class MyExtMethods   
  3. {  
  4.   static public GetFirstLetter(this string s) {return s[0];}  
  5. }  
  6.  

然后就可以用string s = “hello”; char ch = s.GetFirstLetter()了。

原理很簡單,編譯器把上面那句話翻譯成MyExtMethods.GetFirstLetter(s)。LINQ就用到了這個技術(shù)。

14、C# CLR之匿名類型的背后。。。

  1. var o = new {name = “Xiangpeng”, id = 123 }; 

在這背后是編譯器生成的一個匿名類,包含了兩個只讀屬性,形如public int id { get {return _id;} }為什么不做成可讀寫的呢?

很微妙。匿名類自動生成了GetHashCode(),返回的是對所有屬性的hash code做XOR的結(jié)果。如果允許修改屬性值,那么Hash code的值就會變化;而這個可能會出問題~保險起見,只讀吧。

15、C# CLR之每個thread占1M物理內(nèi)存

在Win32編程中thread的1M stack空間是Reserve的,直到真正用時才占用物理內(nèi)存;而在.net中,這1M空間直接被commit。

還好,可以在新建thread時指定stack size。不過這也比較危險,設小了怕不夠。實際上,最好盡量避免創(chuàng)建thread——太多的thread要么導致CPU競爭和context switch,要么都block著浪費內(nèi)存。建議是:能用ThreadPool就用ThreadPool。

以上就是對C# CLR的比較介紹。

【編輯推薦】

  1. 淺析基于SQL2005的CLR存儲過程
  2. 分析與對比CLR Via C#靜態(tài)構(gòu)造函數(shù)的性能
  3. 為你解疑:CLR是什么?
  4. linq to sql多表查詢淺析
  5. linq to sql多表基礎描述
責任編輯:阡陌 來源: 博客
相關(guān)推薦

2009-09-18 09:59:39

C# CLR

2009-09-18 09:02:45

CLR Via C#

2025-10-31 01:33:00

2024-06-24 03:00:00

2024-03-20 10:59:37

開源

2009-09-14 18:34:32

C# List排序

2009-10-23 11:31:05

CLR Via C#調(diào)

2009-09-17 18:56:22

CLR Via C#

2009-10-22 19:11:25

CLR Via C#教

2011-06-22 10:04:03

C#開發(fā)

2009-09-09 14:40:15

C# XML解析

2009-08-27 17:40:21

C#接口的作用

2009-08-31 17:47:43

C#接口使用

2009-08-31 18:01:41

C#接口事件

2009-08-31 17:16:12

C#實現(xiàn)接口

2009-09-02 16:30:20

C#定義數(shù)組

2009-09-07 15:27:04

C# MessageB

2009-09-02 16:41:56

C#聲明數(shù)組

2009-08-31 17:30:10

C#接口的作用

2009-09-17 16:41:12

C#組件編程
點贊
收藏

51CTO技術(shù)棧公眾號

老鸭窝毛片一区二区三区| 久久天堂久久| 中文字幕免费不卡在线| 成人免费淫片视频软件| 青青草手机在线观看| 美国一区二区| 欧美日韩激情在线| 搞av.com| 黄色网页网址在线免费| 99久久99久久精品免费观看| 国产精品久久久久久久久久尿| 五月天激情丁香| 亚洲黄页在线观看| 日韩丝袜美女视频| 日韩av片网站| wwww在线观看免费视频| 国产欧美日韩三区| 国产日韩欧美亚洲一区| 亚洲怡红院av| 日日摸夜夜添夜夜添亚洲女人| 欧美成人午夜激情在线| 精品国产av无码| 国产精伦一区二区三区| 欧美日韩精品三区| 欧美 日韩精品| 牛牛在线精品视频| 亚洲视频中文字幕| 日本一区二区三区在线视频| 全部免费毛片在线播放一个| 九九精品视频在线看| 26uuu久久噜噜噜噜| 青青操视频在线播放| 日韩久久精品网| 亚洲欧美中文在线视频| 在线xxxxx| 欧美片网站免费| 欧美日韩国产成人在线91| 国产日韩成人内射视频| 在线天堂资源| 亚洲成a人v欧美综合天堂下载| 中文字幕av久久| 一区二区高清不卡| 欧美国产日产图区| 欧美性天天影院| 久久米奇亚洲| 久久综合久久综合亚洲| 久久手机视频| 三级在线电影| 久久久www成人免费无遮挡大片| 91免费版网站在线观看| 精品人妻无码一区二区三区蜜桃一| 久久99国产精品久久99| 成人欧美在线观看| 97人妻精品一区二区三区软件| 免费黄网站欧美| 国产精品欧美一区二区| 亚洲视频在线观看一区二区 | 亚洲网站在线观看| 美国黄色a级片| 亚洲+变态+欧美+另类+精品| 亚洲精品久久7777777| 喷水视频在线观看| 老司机在线精品视频| 亚洲国产天堂网精品网站| 免费黄色三级网站| 色综合久久中文| 亚洲男人天堂网| 人妻互换一区二区激情偷拍| 色综合天天综合网中文字幕| 久久视频在线直播| 欧美成人一二三区| 国产日韩免费| 国产精品激情自拍| 一区二区三区免费观看视频| 国产一区二区三区综合| 国产精品一区视频网站| 欧美精品a∨在线观看不卡 | 欧美二级三级| 男同在线观看| 国产精品人人做人人爽人人添| 伊人久久大香线蕉成人综合网 | 国产精品久久久一本精品 | 日本不卡影院| 亚洲www啪成人一区二区麻豆| 国产乱子夫妻xx黑人xyx真爽| 老司机成人影院| 欧美日韩激情一区二区三区| 手机看片国产精品| 亚洲综合图色| 久久精品视频导航| 日韩无码精品一区二区三区| 噜噜噜91成人网| 91老司机在线| 神马久久久久| 亚洲天堂久久久久久久| 人妻无码久久一区二区三区免费| gay欧美网站| 91麻豆精品91久久久久同性| 中文字幕影片免费在线观看| 清纯唯美综合亚洲| 欧美激情一区二区三区成人 | 免费av成人在线| 国产精品久久久对白| 国产日本在线视频| 亚洲国产成人高清精品| 亚洲36d大奶网| 红杏aⅴ成人免费视频| 最新91在线视频| 91看片在线播放| 久久精品国产免费看久久精品| 国产精品制服诱惑| 久cao在线| 91精品91久久久中77777| 中文写幕一区二区三区免费观成熟| 欧美美女在线观看| 国精产品一区一区三区有限在线| 一级黄色免费看| 久久综合九色欧美综合狠狠| 日韩一区二区高清视频| 欧美视频免费看| 亚洲精品一区二三区不卡| 麻豆视频在线观看| 另类小说一区二区三区| 欧洲一区二区在线观看| 福利写真视频网站在线| 欧美一区二区三区在线看| 精品无码国产污污污免费网站 | 亚洲国产wwwccc36天堂| 8x8x成人免费视频| 欧美午夜精品一区二区三区电影| 97精品国产97久久久久久| 国产a级免费视频| 日本一区二区三区四区| 久久9精品区-无套内射无码| 欧美理论电影在线精品| 欧美交受高潮1| 国产日韩一级片| 日韩一区在线播放| 国产精品久久a| 欧美精品系列| 国产精品久久久久久亚洲影视| 欧美婷婷久久五月精品三区| 亚洲电影一级黄| 午夜不卡久久精品无码免费| 欧美破处大片在线视频| 99九九视频| 91cn在线观看| 精品99一区二区三区| 精品无码人妻一区二区三区| 国产精品91一区二区| 精品国产一区二区三区在线| 粉嫩一区二区三区在线观看| 久久精品美女视频网站| 国产男男gay网站| 亚洲人成小说网站色在线| 亚洲天堂网2018| 66视频精品| 91嫩草免费看| 1024在线看片你懂得| 日韩国产激情在线| 9i看片成人免费看片| 久久久久亚洲蜜桃| 污污视频网站免费观看| 欧美日韩国产一区二区三区不卡| 国产精品第一第二| 日本www在线观看视频| 欧美亚洲愉拍一区二区| 国产小视频你懂的| 国产.欧美.日韩| 成人免费aaa| 精品一区电影| 91精品视频网站| 欧美xxxx视频| 亚洲欧美日韩精品久久| 中文字幕欧美色图| 亚洲精品视频在线观看免费| 在线观看成人动漫| 日韩电影在线观看网站| 伊人久久av导航| 高潮久久久久久久久久久久久久| 91国语精品自产拍在线观看性色| 欧美日韩在线中文字幕| 欧美久久久一区| 亚洲一区二区91| 久久久影视传媒| 婷婷激情小说网| 国产视频一区免费看| 亚洲欧洲一区二区在线观看| 精品一区二区三区亚洲| 7777kkkk成人观看| 日本三级在线播放完整版| 精品国产不卡一区二区三区| 天天综合久久综合| 一个色在线综合| 99久久99久久精品免费看小说. | 中文字幕日韩三级片| 美女一区二区视频| 三上悠亚久久精品| 日韩中文在线电影| 久久精品美女| 日韩免费成人| 国产裸体写真av一区二区| 欧美极品少妇videossex| 一区二区三区视频在线 | 成人18精品视频| 亚欧激情乱码久久久久久久久| 在线观看不卡| 亚洲国产精品影视| 久久91成人| 国产一区二区中文字幕免费看| 深夜视频一区二区| 欧美亚洲国产精品| 欧美videosex性欧美黑吊| 日韩在线精品视频| 人成在线免费视频| 亚洲成avwww人| 国产精品视频一二区| 在线一区二区观看| 国内免费精品视频| 亚洲一区二区美女| 日韩a级片在线观看| 亚洲国产电影在线观看| jlzzjizz在线播放观看| 国产91富婆露脸刺激对白| 黄色小视频免费网站| 日韩国产精品91| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 日韩欧美精品在线观看视频| 欧美久久视频| 99久re热视频精品98| 欧美丰满日韩| 亚洲欧美日韩精品综合在线观看| 亚洲永久精品唐人导航网址| 含羞草久久爱69一区| swag国产精品一区二区| 91亚色免费| 91精品国产乱码久久久竹菊| 成人免费在线视频网站| 欧美一级免费| 成人免费黄色网| 亚洲精品大全| 91精品视频播放| 伊人久久一区| 亚洲bt天天射| 91成人精品在线| 国产嫩草一区二区三区在线观看| 日韩精品成人在线观看| 3d动漫啪啪精品一区二区免费| 精品一区二区三区四区五区| 91手机在线视频| 国产精品极品国产中出| 国模精品一区二区三区| 三级精品视频| 日本黑人久久| 久久五月天小说| 免费成人深夜夜行网站视频| 欧美在线91| 欧美亚洲黄色片| 亚洲一区日韩| 天天碰免费视频| 国模大尺度一区二区三区| 99精品视频国产| 懂色av一区二区三区免费观看 | 久久久久久99久久久精品网站| 中国美女乱淫免费看视频| 国产午夜精品美女毛片视频| 欧美午夜激情影院| 亚洲柠檬福利资源导航| 国产在线拍揄自揄拍| 黑丝美女久久久| 91视频久久久| 8x8x8国产精品| 亚洲精品一区二区三区不卡| 日韩精品日韩在线观看| av男人的天堂在线| 久久99精品久久久久久噜噜| 日韩伦理精品| 国产精品自拍视频| 2020国产精品极品色在线观看| 久久手机视频| 亚洲激情五月| 国产三区在线视频| 久久成人免费日本黄色| 天堂www中文在线资源| 欧美极品美女视频| 久久久久免费看| 色94色欧美sute亚洲13| 99国产精品99| 亚洲视频999| 尤物视频在线看| 国产91免费观看| 日韩在线成人| 午夜精品视频在线观看一区二区| 国产精品hd| 日本久久久久久久久久久久| 成人一区二区视频| 成人免费视频入口| 精品日韩美女的视频高清| 国产又大又黄又爽| 亚洲欧美精品suv| 污视频网站在线免费| 国产精品日韩专区| 日本国产精品| www国产免费| 蜜桃av噜噜一区| 人妻丰满熟妇av无码久久洗澡 | 91午夜在线观看| 蜜桃av一区二区三区电影| 国产又粗又长又爽| 亚洲欧美另类图片小说| 亚洲综合成人av| 亚洲国内精品在线| fc2ppv国产精品久久| 国产精品普通话| 九九热爱视频精品视频| 亚洲国产精品无码av| 国产一区二三区| 国产探花视频在线| 欧洲色大大久久| 婷婷亚洲一区二区三区| 欧美激情喷水视频| 韩国一区二区三区视频| 亚洲国产欧美不卡在线观看| 一区二区三区福利| 伊人久久一区二区三区| 亚洲一区二区三区自拍| 国产男男gay网站| 久久夜色精品国产欧美乱| 成人高清一区| 色乱码一区二区三在线看| 日韩精品乱码免费| 醉酒壮男gay强迫野外xx| 天天亚洲美女在线视频| 内射后入在线观看一区| 欧美极品欧美精品欧美视频| 高清一区二区三区av| 99re99热| 国产专区欧美精品| 午夜国产福利一区二区| 91精品中文字幕一区二区三区| 免费黄色网址在线观看| 国产一区二区香蕉| 婷婷久久综合| 国产探花在线观看视频| 亚洲欧美日韩国产一区二区三区 | 九色综合狠狠综合久久| 手机免费观看av| 91精品国产综合久久精品麻豆| 乱人伦中文视频在线| 国产欧美日韩高清| 亚洲国产精品成人| xxxx视频在线观看| 亚洲成人av福利| 欧美日韩国产综合视频| 日本亚洲欧美三级| 成人羞羞动漫| 91插插插影院| 亚洲一区二区三区视频在线播放 | 成人avav在线| 91porny在线| 亚洲欧美成人网| 欧美91在线|欧美| 91大学生片黄在线观看| 成人免费观看av| 中文字幕第四页| 伊人久久久久久久久久久久久| 视频欧美精品| 成人免费网站入口| 91日韩一区二区三区| 国产成人自拍偷拍| 久久久精品视频成人| 精品国产导航| 中文字幕欧美人妻精品一区| 国产精品电影院| 国精品人妻无码一区二区三区喝尿 | 欧美日韩在线免费视频| 国产精品剧情| 久久久久久久久一区| 蜜臀久久久99精品久久久久久| 青青操视频在线播放| 亚洲人av在线影院| 97精品资源在线观看| 国产乱子伦农村叉叉叉| 国产精品伦理在线| 乱色精品无码一区二区国产盗| 欧美在线视频a| 亚洲国产精品久久久天堂| 女同性恋一区二区三区| 欧美日韩国产一二三| 第四色日韩影片| 少妇特黄a一区二区三区| 国产精品888| 中文字幕av久久爽| 亚洲91精品在线| 国产精品精品| 女~淫辱の触手3d动漫| 欧美一区二区三区啪啪| 韩日成人影院| 国产欧美精品aaaaaa片| 中文字幕欧美激情一区|