Dot-Net

使用在舊版本的 .NET 框架中編譯的程序集會影響整體性能嗎?

  • August 2, 2017

假設我們有兩個程序集:

  1. Foo.Logic(在 .NET 2.0 框架上編譯)
  2. Foo.Application(在 .NET 4.0 框架上編譯)具有引用並使用已編譯的 Foo.Logic。

它是否對 Foo.Application 性能有影響(或有任何其他缺點)?

在您在問題中描述的情況下,一切都會正常工作™,沒有任何問題。

.NET 4.0 應用程序會將 .NET 2.0 庫直接載入到 .NET 4.0 執行時環境中。除非您明確要求,否則它不會使用並行執行。網路上有很多關於此的錯誤資訊或不清楚的陳述,因此在評估您所閱讀的內容時要小心。

我終於看到了這篇文章,它證實了 Jon Skeet 在他的回答中所說的話。特別是,文章解釋了(重點補充):

In-Proc SxS 不能解決庫開發者面臨的兼容性問題。任何由應用程序直接載入的庫——通過直接引用或 Assembly.Load——**將繼續直接載入到載入它的應用程序的執行時和 AppDomain。這意味著,如果重新編譯應用程序以針對 .NET Framework 4 執行時執行,並且仍然具有針對 .NET 2.0 建構的依賴程序集,那麼這些依賴程序也將載入到 .NET 4 執行時。**因此,我們仍然建議針對所有版本測試您的庫

$$ s $$您希望支持的框架。這是我們繼續保持高水平向後兼容性的原因之一。

但是,如果您對更多細節感興趣,值得一提的是,CLR 4.0 版引入的新功能之一是能夠同時執行多個版本的執行時。過程。這被稱為“In Process Side-by-Side Execution”(或者“Inproc SxS”,如果你很酷的話),是一個非常強大的工具。您可以在 CLR 團隊的部落格上閱讀有關它的更多資訊。

以下是一些用於展示目的的漂亮圖片:

請注意用於在 .NET 2.0 之上建構 .NET 3.0 和 3.5 版本的“分層蛋糕”模型。這意味著它們都將並排執行而不會出現任何問題。但是其他版本的隔離產生問題。

但是,如上所述,.NET 4.0 通過並行執行解決了這個問題:

當然,這主要適用於涉及 COM 和與 Outlook 等外部應用程序互操作的情況,但它仍然是一個非常酷的功能。

但無論哪種方式,您都不應該看到這種方法有任何問題,無論是兼容性、性能還是其他任何問題。

引用自:https://stackoverflow.com/questions/6216599