本帖最后由 isaacjustin 于 2009-11-06 14:03:57 编辑

解决方案 »

  1.   

    google 如下关键字,未获得结果
    why c# need virtual machine
    benifit c# virtual machine
      

  2.   

    很明显 虚拟机为统一代码实现不同平台的统一功能存在.windows98 2000 xp 2003 ... 等等 不同平台下的开发 系统api都是不一样的 你使用虚拟机的话 你就不用考虑平台的问题了,你只需要使用相同的一个方法 就能在不同平台上得到同样的结果.
      

  3.   

    也就是为了向前兼容过去发布的windows98?
      

  4.   

    C#编译以后的EXE仍旧是中间语言(Intermedia Language)而不是机器码,楼上谈到的虚拟机就是用来“解释”这些中间语言的。跨平台应该是一个主要的考虑吧。理论上C#在Windows 98上,甚至是DOS上都可以跑C#的程序,但是肯定会是缩减功能的。另外,java也是在虚拟机上跑的,称为javavm
      

  5.   

    好,作为虚拟机,那就不是Binary的目标平台(x86/PowerPC/ARM/MIPS)机器码。既然C shaper都不否认C#的目标应用包括桌面应用。
    1. 作为桌面应用虚拟机带来的效率降低
    2. 如果我写一个应用,需要使用6G的内存空间,那这个应用又如何谈即可以run在32位,又可以run在64位?
      

  6.   

    这确实没啥好说的,就是参考JAVA虚拟机跨平台,只不过,M$够可以的,只夸它自己的以前版本操作系统(这也叫跨平台?)
      

  7.   

    语言采用一个新的机制必须有充分的理由,和足够好的优点。如果说虚拟机在java跑的非常好,那就说明这是个好东西,拿过来绑在C#身上就一是好,这个理由貌似有道理。
      

  8.   

    CSDN规则回复后就不可以修改主贴,为了避免歧义,我在这里重新定义一下问题为如下。
    Question:
    C#为什么需要一个虚拟机?1. 引入虚拟机解决了那些问题。
    2. 解决的这些问题的程度和粒度达到如何的层次。
    3. 那些理由足够充分说明解决的这些问题比带来的下面问题是值得的
       a.性能下降
       b.发布软件需要在目标机器安装庞大的.net framework
      

  9.   

    性能下降托管程序有可能在性能方面超过非托管程序  
    参见 .NET框架程序设计 修订版 p18发布软件需要在目标机器安装庞大的.net framework 微软已决定在未来的Windows版本中嵌入.net framework  
    也就是说在未来的Windows版本上 可以直接运行 managed PE 文件
      

  10.   

    根据北半球兄台的指引,我按图索骥,下载了Applied .net framework programing(目前尚不清楚是否修订版,修订版是否只修改了部分小规模的遗漏)1. 所谓managedPE文件,我看二进制结构图里面是在传统PE头后面加了CLR head,那么我想是不是可以说这种结构跟performance没关系。
    2. 关于performance improve,这个严格来讲需要根据特定的应用跑一个bench,比如office application,multi-media modification etc... 用一个量化的东西来衡量
    从另一个角度来讲,作为二进制里面的中间语言(虚拟机上的汇编),在运行时需要虚拟机来转译成为目标机器码(注1),那么就需要虚拟机来扮演一个汇编解释的角色,无可否认可以通过类似编译器优化类似的原理对指令做一个优化,但总的来说平均性能大约是要降低的吧。注 1:貌似CLR也有OS api接口转换的功能,这相当于多加了额外一层,即使没增加函数调用成本,至少增加了程序跳转的成本。
      

  11.   

    litaoye兄的这个比喻非常好特别贴切,而且形象,确实是为了编译后代码平台兼容,加了一层。
      

  12.   

    可是有很多跨平台库就有这个功能,跨平台库可是实现不同OS的兼容。
    也就是说你写一套架构在跨平台之上的应用就可以实现在不同的OS,不同的版本上发布。话题回来,还是没靠到虚拟机带来的优点上
      

  13.   

    虚拟机降低了部分性能,换来的是代码安全和跨平台,而且按照JAVA的发展历程来看,跨平台恐怕是MS主要考虑的。试想,如果我们以后再windows下开发的程序,只要其他OS安装了CLR,就能实现一次编译,到处运行,那该是多美妙的事情?
      

  14.   

    如此看来C sharp大牛都在忙
      

  15.   

    确实可以这样,但成本会更高,其实虚拟机解决的主要是强耦合性的问题。
    强耦合就降低了移植的可能,这个从Com开始,就被无数次论证过了。
      

  16.   

    C# 中虚拟机就是CLR,负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离
    提高代码的安全性。
      

  17.   

    Question: 
    C#为什么需要一个虚拟机? 1. 引入虚拟机解决了那些问题。 
    答:解决了程序员的吃饭问题,能够提高程序员的生活水平。2. 解决的这些问题的程度和粒度达到如何的层次。 
    答:产生了像我一样的一大批菜鸟能够跟着微软一起起哄了。3. 那些理由足够充分说明解决的这些问题比带来的下面问题是值得的 
      a.性能下降 
    答:这样可以帮助硬件商们不断地推出新品种的PC了。  b.发布软件需要在目标机器安装庞大的.net framework
    答:这样可以吸引更多的黑客对其感兴趣,从而为他们做免费广告。 
      

  18.   

    CLR 公共语言运行时,效率不能叫做损耗,而是成本
    付出的运行速度成本,是为了换来开发效率的提高以及 更加服务于人的大方向这是语言的发展的基本趋势之一
    不能说什么有了CLR NF,桌面程序 效率就不行了,你这么说
    纯粹瞎掰
      

  19.   

    高见,谈到安全性,我有一事不明,CLR是否解决了函数调用的返回地址攻击这一C/C++天生的弱点(除了禁止堆栈代码执行补丁这种C已经研究出来的解决方法)
      

  20.   

    强耦合性其实不是什么高深的名词,很容易理解,就是对外部因素依赖过多。针对于Com,这个外部因素就是操作系统本身。现在仍然有许多基于Com或ActiveX的构架,跑的也很好,在以后也会有很长时间的生命力,不过这些架构本身的研发以及部署维护的成本将会越来越高。另外就像上面几位朋友所说的,虚拟机在安全性上也可以得到好一些的保证,之前没有专门提安全性的问题,是因为这个比较依赖于安全性这个词的定义,有了虚拟机确实可以避免出现令系统崩溃的错误,但仍有其他影响安全的因素存在。其实有时候想想,为什么要有虚拟机的问题,就好像为什么要有XML?肯定存在空间占用更小的数据结构,可以实现和XML一样的效果。为什么要有WebService(当然,确实快没有了)?基于Http的传输本身就不算有效率。为什么要有动态语言?难道会比静态语言快么(当然也得看和谁比)?......我想更多这样的疑问,其答案不是由实验室研究发现的,而是从实际工作中总结归纳,权衡利弊得出的。所以这些疑问,以及这些疑问的解答,也肯定是在一定条件下才存在的。假如我们只有1种操作系统,我们还需要虚拟机么?假如有了同WebService一样简单,但更有效率更强大的通讯方式,我们还需要WebService么?假如没有面对对象了,我们还会使用UML么?......
      

  21.   

    Question:
    C#为什么需要一个虚拟机?
    因为java有虚拟机,而C#是微软借鉴java的产物,自然也要有个虚拟机,不然像反射 异常处理 以及垃圾回收等东西不好“借鉴”。
    哪天反射等特性不需要虚拟机了,C++就会进化成不需要虚拟机的“C#”。1. 引入虚拟机解决了那些问题。
    C#并没有引入虚拟机,而是本身就以虚拟机为基础,所以没有神马问题要解决。(可能楼主,希望微软做一个不需要虚拟机的“C#”,然后拿它来和当前的C#比较)