C# 在一个解决方案中使用多个.NET运行时对性能/内存的影响

C# 在一个解决方案中使用多个.NET运行时对性能/内存的影响,c#,.net,clr,C#,.net,Clr,如果我所使用的解决方案(200ish csprojects)完全为一个.NET CLR版本(4.5)构建,但大量使用为旧的.NET CLR(2.0/1.1)构建的第三方库(在我的例子中是Common.Logging 1.2),那么会对性能或内存消耗产生任何影响吗 研究各种材料()表明,由于并排使用,内存消耗很可能会增加,但与为相同的.NET CLR付出努力并重建所有引用的第三方库相比,SxS是否会对性能造成任何影响尚不清楚 假设我的.NET4.5解决方案广泛使用common.logging(.N

如果我所使用的解决方案(200ish csprojects)完全为一个.NET CLR版本(4.5)构建,但大量使用为旧的.NET CLR(2.0/1.1)构建的第三方库(在我的例子中是Common.Logging 1.2),那么会对性能或内存消耗产生任何影响吗

研究各种材料()表明,由于并排使用,内存消耗很可能会增加,但与为相同的.NET CLR付出努力并重建所有引用的第三方库相比,SxS是否会对性能造成任何影响尚不清楚

假设我的.NET4.5解决方案广泛使用common.logging(.NET2.0/1.1)。如果我努力重建(+如有必要,更新源代码)这个common.logging到.NET4.5,我的解决方案是否会加快速度(如果是的话,是否足以让我的努力变得值得)

编辑(澄清):
该解决方案生成独立的应用程序(无IIS/ASP.NET)可执行文件。

一个进程不可能使用多个版本的CLR以及针对特定版本框架的托管可执行文件。这就是为什么构建在.NET2.0上的项目不能引用构建在.NET4.5上的dll。但是,基于4.5构建的项目可以引用基于2.0构建的dll,因为CLR彼此向后兼容

如果出现一个进程,比如说在.Net 4.5上构建的Windows窗体应用程序引用了.Net 2.0依赖关系,该依赖关系将使用4.5框架,逐步升级

现在,如果我们谈论的是IIS应用程序,那么在一个解决方案中有两个web应用程序可能是针对两个不同的.net版本构建的,并且都使用这些版本,但前提是每个web应用程序都有自己的应用程序池,或者通过两个单独的IIS站点,或1个IIS站点,其中包含两个独立的子应用程序,每个应用程序使用不同的应用程序池


如果我错了,请纠正我。

对于一个进程来说,不可能使用多个版本的CLR以及针对特定版本框架的托管可执行文件。这就是为什么构建在.NET2.0上的项目不能引用构建在.NET4.5上的dll。但是,基于4.5构建的项目可以引用基于2.0构建的dll,因为CLR彼此向后兼容

如果出现一个进程,比如说在.Net 4.5上构建的Windows窗体应用程序引用了.Net 2.0依赖关系,该依赖关系将使用4.5框架,逐步升级

现在,如果我们谈论的是IIS应用程序,那么在一个解决方案中有两个web应用程序可能是针对两个不同的.net版本构建的,并且都使用这些版本,但前提是每个web应用程序都有自己的应用程序池,或者通过两个单独的IIS站点,或1个IIS站点,其中包含两个独立的子应用程序,每个应用程序使用不同的应用程序池


如果我错了,请更正。

假设:您的应用程序是一个主应用程序,它加载多个针对不同框架版本的程序集

虽然程序集的目标是不同的.NET framework版本,但由于存在错误,它们都将使用应用程序加载的版本。这是默认行为,这意味着它不会加载额外的运行时。这种行为可以被重写,也可以在MSDN上描述,这意味着您必须指定是否希望使用额外的运行时并行执行

回答:在.NET 4.5中重建旧项目不会加快解决方案的速度,因为统一已经在.NET 4.5中执行这些程序集

从链接页面

在下图中,应用程序MyApp使用两个组件,组件A和组件B。MyApp和组件A是使用运行时版本1.0构建的,因此它们包含对运行时版本1.0的静态引用。组件Comp B包含对运行时版本1.1附带的.NET Framework程序集的静态引用,但由于统一,该程序集被重定向到使用运行时版本1.0附带的.NET Framework程序集运行。


假设:您的应用程序是一个主应用程序,它加载多个针对不同框架版本的程序集

虽然程序集的目标是不同的.NET framework版本,但由于存在错误,它们都将使用应用程序加载的版本。这是默认行为,这意味着它不会加载额外的运行时。这种行为可以被重写,也可以在MSDN上描述,这意味着您必须指定是否希望使用额外的运行时并行执行

回答:在.NET 4.5中重建旧项目不会加快解决方案的速度,因为统一已经在.NET 4.5中执行这些程序集

从链接页面

在下图中,应用程序MyApp使用两个组件,组件A和组件B。MyApp和组件A是使用运行时版本1.0构建的,因此它们包含对运行时版本1.0的静态引用。组件Comp B包含对运行时版本1.1附带的.NET Framework程序集的静态引用,但由于统一,该程序集被重定向到使用运行时版本1.0附带的.NET Framework程序集运行。


很难评估建议工作的影响。使用4.5而不是2.0可能会加快速度,但使用.NET4.5的新API/重新布线的API修改旧代码可以进行很多改进。最后我要说的是,它可能会加快速度。入口点应用程序决定使用的运行时。如果该运行时与版本兼容,则其他所有内容都将加载到该运行时中。是否确实运行了2个运行时?(使用严格管理的代码通常很难实现,因此很有可能您没有实现)…入口点(C#.NET可执行文件)是为.NET4.5构建的。唉,它正在使用较旧的.NET库。从我对.NET运行时兼容性的理解来看,从.NET4.0开始,它实际上就是c