草庐IT

C# 编译器优化

我想知道是否有人可以向我解释编译器到底做了什么让我观察到一个简单方法的性能差异如此之大。publicstaticuintCalculateCheckSum(stringstr){char[]charArray=str.ToCharArray();uintcheckSum=0;foreach(charcincharArray){checkSum+=c;}returncheckSum%256;}我正在与一位同事合作,为消息处理应用程序做一些基准测试/优化。在VisualStudio2012中使用相同的输入字符串对此函数进行1000万次迭代大约需要25秒,但是当使用“优化代码”选项构建项目时

为什么在IL代码中stloc.0之后有一个ldloc.0?

我正在尝试通过编写小型代码段并检查编译的组件来学习CIL。所以我写了这个简单的语句:publicstaticvoidMain(string[]args){Int32i=Int32.Parse(Console.ReadLine());if(i>0)Console.WriteLine("iisgreaterthan0");}和C#编译器将其编译为以下IL代码:.methodpublichidebysigstaticvoidMain(string[]args)cilmanaged{.entrypoint.maxstack2.localsinit([0]int32num,[1]boolflag)L_0