关于优化:.NET Framework 3.5而不是2.0编译是否有任何优势?

关于优化:.NET Framework 3.5而不是2.0编译是否有任何优势?

Are there any advantages compiling for .NET Framework 3.5 instead of 2.0?

.NET Framework 3.5而不是2.0编译有什么优势?

例如更少的内存消耗,更快的启动,更好的性能...

我个人不这么认为,但是我可能错过了一些东西。

编辑:当然,3.5框架中还有更多功能,但是这些不是此问题的重点。

Edit2:似乎没有优势。

Edit3:是的,我的意思是针对框架。 我已经安装了最新的3.5 SP1和VS 2008,因此使用框架进行编译和针对框架有什么区别? 我可以在项目选项中定位框架,但是如何"编译"特定的框架版本? 我不知道有什么区别。

Edit4:所以现在我们同意没有优势。

谢谢你的意见


编译和定位之间有区别。

使用(例如)C#3.0编译器编译代码可能会提高性能(无论如何很少),因为其中包括对生成的IL代码的一些优化。它还允许您使用一些新功能,例如自动属性或lambda表达式。

针对给定框架的目标将确保您的程序集适用于该框架(及后继者),并且如果目标为2.0并且使用3.5库,则将失败。除非您将一个框架中的一个类替换为另一个"最快"类,否则任何性能改进都不会直接与此相关。例如,针对.NET 1.1,将不允许您使用泛型,因此,您必须使用比List慢得多的ArrayList(由于装箱和拆箱)。


关于.NET 2.0和.NET 3.5,要记住两件事。

  • .NET Framework 3.5只是在.NET 2.0之上运行的几个库。
  • 在Visual Studio 2008中开发并面向.NET 2.0时,您仍然可以使用某些C#3.0语言功能(例如扩展方法),因为它们实际上是C#3.0(或.NET 3.5)编译器的功能。看到此链接:http://www.codethinked.com/post/2008/02/Using-Extension-Methods-in-net-20.aspx

  • 如果您的.NET程序集以.NET 3.5为目标,则生成的应用程序将查找并需要.NET 3.5库,仅此而已。这些库附带了.NET 2.0框架中找不到的许多其他分类,因此这将是针对这些库的优势。

    但是,如果您使用例如附带的C#3.0编译器来编译C#代码。 Visual Studio 2008,适用于.NET 3.5,但装配目标为.NET 2.0,您仍然只需要常规的.NET 2.0库,尽管它实际上使用某些.NET 3.5编译器功能,但其中许多功能最后只使用.NET 2.0代码。在此处了解更多有关此信息:http://weblogs.asp.net/shahar/archive/2008/01/23/use-c-3-features-from-c-2-and-net-2-0-code。 aspx


    我相信每个版本的Visual Studio都附带一个不同的编译器。例如,对于C#,Visual Studio 2005附带的2.0编译器和Visual Studio 2008附带的C#3.0。根据所使用的Visual Studio版本,最终会使用不同的编译器。

    定位框架是指在编译过程中要定位的框架版本。定位框架是Visual Studio 2008的新功能。例如,我可以在Visual Studio 2008中打开一个解决方案,并以.Net为目标v2.0。结果将是在编译期间我无法使用任何3.0或3.5 .Net功能,例如WPF。


    我认为您必须要针对.NET 3.5框架进行编译?如果是这样,那么正如其他人所说,我相信您不会看到太大的不同。

    但是,如果您正在谈论使用更新的编译器,则在以下链接中对C#和VB进行了各种更改和中断更改:

    • C#3.0和SP1编译器
      唱诗
    • Visual Basic的新增功能
      编译器
    • Visual Basic 2008突破
      变化

    如果您没有使用该框架版本中的任何类,则编译到3.5框架没有任何好处。


    我还没找到如果您不需要3.5特定功能,则明显的缺点是3.5代码库更年轻,因此有可能(尽管不太可能)潜伏着一些错误。


    3.5具有2.0没有的类。例如Func <...>。如果您的目标是2.0,则不能使用它们。


    推荐阅读