本文整理了关于C# CLR的15个知识点。这些都是最为基本的知识,但由于现在大家对CLR还不是很了解,所以看起来会有一丝不理解,还是希望能给大家带来帮助。
本文整理了关于C# CLR的15个常识点。这些都是最为根本的常识,但由于现在我们对CLR还不是很了解,所以看起来会有一丝不了解,仍是期望能给我们带来协助。
1、C# CLR之foreach的功能问题
foreach(string s in rows) { foo(s); }的完成是:
- IEnumeratore=rows.GetEnumerator();
- try{
- strings;
- while(e.MoveNext()){
- s=(String)e.Current;
- foo(s);
- }
- }
- finally{
- IDisposabled=easIDisposable;
- if(d!=null)d.Dispose();
- }
每一步都调用了e.MoveNext()和e.Current两个方法;而大多数时分,彻底有或许优化为一次调用。明显这对功能是有影响的。尽管foreach关于数组作了独自的优化(编译成for循环),但这仍是值得留意的。
那么,怎样做比较快?
关于List等Collection,能够用ForEach(Action action),FindAll(Predicate match),ConvertAll(Converter converter)等方法。它们比较快,但不是一切完成IEnumerable的类都供给。
LINQ寻求compatiblity,而不是performance。因而LINQ的完成彻底采用了foreach。值得留意。
2、C# CLR之yield的完成原理
完成一个支撑IEnumerable的目标时,一般会用到yield关键字,这样foreach遍历这个目标时,能够做到lazy evaluation。例如:
- classMyCollection:IEnumerable
- {
- privatestrings;...
- publicIEnumerableGetEnumerator()
- {
- for(inti=0;i_
转载请说明出处
知优网 » 解析C# CLR的15个细节(c语言clr)
知优网 » 解析C# CLR的15个细节(c语言clr)