我已经看到这个问题在论坛上出现了很多次,所以我写这篇文章是希望对那些有此问题的人有所帮助。 首先,历史课!
您以前的语言已编译为汇编语言。 对于MS C ++,通常是Pentium4。如果不是为了降低性能,许多处理器可以阅读此语言。
有了.NET,这发生了变化。 现在,所有.NET语言都可以将*编译为*称为MSIL(Microsoft中间语言),但现在称为CIL(通用中间语言)。 期望听到任何一个缩写,因为它们都是同一意思。 无论是C#,VB .Net,C ++ CLI还是Delphi,它们都可以编译为该语言。 这是什么语言? 它是伪汇编语言。
这种伪汇编语言无法被CPU读取...因此.NET框架附带了另一个工具。 JIT(及时)编译器。 当运行用.NET编写的程序时,它将自动运行。 它仅编译您正在使用的程序部分,因此,从技术上讲,您永远无法编译程序的部分。 优点? 劣势? 好吧,这里不必赘述,可以归结为:将其编译为用户特定CPU的汇编语言,从而提高了运行速度,尽管在运行时需要额外的编译费用。
.NET的另一个主要组成部分是GC(垃圾收集)。 据信,这是内存泄漏的尽头,GC在后台运行,不断监视您的程序并清理未使用的内存。 这是如何运作的? 好吧,它会监视何时以及是否引用变量,以及何时不再引用它会释放它。 尽管它确实清除了许多变量,但仍然有一些特定的实例需要程序员自己清理,但这些实例远少于其他语言。 这也增加了开销。
我将在.NET中最后谈到的是它所包含的库。 .NET已经包含了许多功能,许多程序员可以在其中找到所需的全部功能。 很少有功能必须通过WIM或其他外部设备进行硬编码。
许多人指出.NET程序的运行速度比C ++程序慢,而许多人则相反。 他们的争论源于.NET的GC和JIT部分。 当JIT确实编译运行速度更快的汇编代码时,该程序会在后台运行更多代码以使其继续运行。 收益大于结果吗? 那是第二天的问题,但知道答案可能在于“依赖”。 它可能取决于程序及其正在执行的操作。
* NGEN-
本机映像生成器(NGEN)可以创建预编译为汇编语言的.NET版本,如果处理器可以使用它,它将覆盖它的JIT版本。 尽管它仍然合并了GC,但是对于编译到的特定处理器,它比JIT快。
From: https://bytes.com/topic/net/insights/686553-what-net-why-do-i-need-framework