跑循环没有什么意义吧,java跑循环也很快的stl在编译时确定容器中元素的类型,.net的容器全部都是放object,进出都要做转换,当然慢了

解决方案 »

  1.   

    .Net是本地代码么?好像微软不是这么说的吧!
      

  2.   

      .net自己又不能跑代码,跑代码的是你的CPU!所以如果跟踪的太底层,Java/C#程序都会变成本地代码的!.NET的基本实现方法和Java HotSpot没什么区别,可能是具体的实现再算法和程序方面比较优越罢了。这些JIT的东西性能测试很困难,用死循环来测不太好。
      性能的损失不单单是box/unbox,还有动态类型,如Ripper所言。所以.NET里面将来也少不了template支持的。
      

  3.   

    ripper(rIPPER)和qqchen79(知秋一叶)说得很对。
    首先测试某个系统的性能,不是简简单单一两个程序循环就可以的。这样也太没有公信力了吧。呵呵。
    第二,.net提供的编译器虽然把那些c#,vb.net的源代码编译成.exe文件,但还是MIL中间语言。跑的时候还是要JIT来管着跑。和jvm是道理上类似的。如果跟踪到framework下面去了,那应该就是x86的机器码。
    第三,你的实验比较直观感性的说明了采用不同类型内部的开销变化,怪不得读那些老外的书,一会这里建议一下,那里推荐一下。这里说这样虽然可以,但是有performance penalty,那里说要实现这种做法,you'd better use .....alternative..。这个背后还是有很多花花的嘛。学习
      

  4.   

    C#不是本地代码!!!!
    当你编译一个C#应用程序,或其他的任何用CLS兼容的语言编写的程序时,应用程序会被编译成MSIL.当该应用程序首次在CLR中执行,MSIL就被进一步编译(通过JITER代码转换)成真正的CPU指令.