Performance/Memory 在一个解决方案中使用多个 .NET 运行时的影响

Performance/Memory impact using multiple .NET runtime in one solution

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

研究各种材料 (https://msdn.microsoft.com/en-us/magazine/ee819091.aspx) 表明很可能由于 Side-by-Side 会增加内存消耗,但尚不清楚 SxS 与努力为同一个 .NET CLR 重建所有引用的第 3 方库。

假设我的 .NET4.5 解决方案广泛使用 common.logging (.NET2.0/1.1)。如果我努力将此 common.logging 重建(必要时更新源)到 .NET4.5,我的解决方案是否会加速(如果是,是否足以让这些努力值得)?

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

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

在进程的情况下,例如 Windows 基于 .Net 4.5 构建的 Forms 应用程序引用 .net 2.0 Depedency,Dependency 将使用 4.5 Framework,逐步升级。

现在,如果我们谈论 IIS 应用程序,则可以在 1 个解决方案中有两个 Web 应用程序针对两个不同的 .net 版本构建,并且都使用这些版本,但前提是每个 Web 应用程序都有自己的应用程序池通过 2 个独立的 iis 站点,或 1 个具有两个独立子应用程序的 IIS 站点,每个应用程序使用不同的应用程序池。

如有错误请指正

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

虽然您的程序集针对不同的 .NET 框架版本,但由于 Assembly Unification,它们都将使用您的应用程序加载的版本。这是默认行为,这意味着它不会加载额外的运行时。此行为可以被覆盖,在 MSDN 上也有描述,这意味着您必须指定是否要 side-by-side 使用额外运行时执行。

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

来自链接页面。

In the following illustration, the application MyApp uses two components, Comp A and Comp B. MyApp and Comp A were built with runtime version 1.0, so they contain static references to runtime version 1.0. Component Comp B contains a static reference to a .NET Framework assembly that shipped with runtime version 1.1, but because of unification, is redirected to run using the .NET Framework assembly that shipped with runtime version 1.0.