本文整理了关于C# CLR的15个知识点。这些都是最为基本的知识,但由于现在大家对CLR还不是很了解,所以看起来会有一丝不理解,还是希望能给大家带来帮助。

本文整理了关于C# CLR的15个常识点。这些都是最为根本的常识,但由于现在我们对CLR还不是很了解,所以看起来会有一丝不了解,仍是期望能给我们带来协助。

解析C# CLR的15个细节(c语言clr)  C# CLR 第1张

1、C# CLR之foreach的功能问题

foreach(string s in rows) { foo(s); }的完成是:

  1. IEnumeratore=rows.GetEnumerator();
  2. try{
  3. strings;
  4. while(e.MoveNext()){
  5. s=(String)e.Current;
  6. foo(s);
  7. }
  8. }
  9. finally{
  10. IDisposabled=easIDisposable;
  11. if(d!=null)d.Dispose();
  12. }

每一步都调用了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。例如:

  1. classMyCollection:IEnumerable
  2. {
  3. privatestrings;...
  4. publicIEnumerableGetEnumerator()
  5. {
  6. for(inti=0;i_
转载请说明出处
知优网 » 解析C# CLR的15个细节(c语言clr)

发表评论

您需要后才能发表评论