托管代码的优点Microsoft 中间语言与 Java 字节代码共享一种理念:它们都是一种低级语言,语法很简单(使用数字代码,而不是文本代码),可以非常快速地转换为部机器码。对于代码来说,这种精心设计的通用语法,有很大的优点。1. 平台无关性首先,这意味着包含字节代码指令的同一个文件可以放在任一个平台中,运行时编译过程的最后阶段可以很容易完成,这样代码就可以运行在该特定的平台上。也就是说编译为中间语言就可以获得 .NET 平台无关性,这与编译为 Java 字节代码就会得到 Java 平台无关性是一样的。注意.NET 的平台无关性目前只是一种可能,因为在编写本书时,.NET 只能用于 Windows 平台,但人们正在积极准备,使它可以用于其他平台(参见 Mono 项目,它用于创建.NET 的开放源代码的实现,参见 go-mono./)。2. 提高性能实际上,IL 比 Java 字节代码的作用还要大。IL 总是即时编译的(称为 JIT 编译),而 Java 字节代码常常是解释性的,Java 的一个缺点是,在运行应用程序时,把 Java 字节代码转换为部可执行代码的过程会导致性能的损失(但在最近,Java 在某些平台上能进行 JIT 编译)。JIT 编译器并不是把整个应用程序一次编译完(这样会有很长的启动时间),而是只编译它调用的那部分代码(这是其名称由来)。代码编译过一次后,得到的部可执行代码就存储起来,直到退出该应用程序为止,这样在下次运行这部分代码时,就不需要重新编译了。Microsoft 认为这个过程要比一开始就编译整个应用程序代码的效率高得多,因为任何应用程序的大部分代码实际上并不是在每次运行过程中都执行。使用 JIT 编译器,从来都不会编译这种代码。这解释了为什么托管 IL 代码的执行几乎和部机器代码的执行速度一样快,但是并没有说明为什么Microsoft 认为这会提高性能。其原因是编译过程的最后一部分是在运行时进行的,JIT 编译器确切地知道程序运行在什么类型的处理器上,利用该处理器提供的任何特性或特定的机器代码指令来优化最后的可执行代码。传统的编译器会优化代码,但它们的优化过程是独立于代码所运行的特定处理器的。这是因为传统的编译器是在发布软件之前编译为部机器可执行的代码。即编译器不知道代码所运行的处理器类型,例如该处理器是 x86 兼容处理器或 Alpha 处理器,这超出了基本操作的围。例如 Visual Studio 6 优化了一台一般的Pentium 机器,所以它生成的代码就不能利用 Pentium III 处理器...