Влияет ли использование сборки, скомпилированной в более старой версии .NET Framework, на производительность в целом? - PullRequest
10 голосов
/ 02 июня 2011

Давайте представим, что у нас есть две сборки:

  1. Foo.Logic (скомпилировано на платформе .NET 2.0)
  2. Foo.Application (скомпилирован на платформе .NET 4.0), который имеет ссылку и использует скомпилированный Foo.Logic.

Влияет ли это на производительность Foo.Application (или есть другие недостатки)?

Ответы [ 2 ]

19 голосов
/ 02 июня 2011

В ситуации, которую вы описали в вопросе, все будет просто работать без проблем.

Приложение .NET 4.0 загрузит библиотеку .NET 2.0 непосредственно в среду выполнения .NET 4.0.Он не будет использовать параллельное выполнение, если вы явно не попросите его об этом.В Интернете есть много дезинформации или неясных утверждений об этом, поэтому будьте осторожны при оценке прочитанного.

Я наконец-то наткнулся на эту статью , которая подтверждает то, что говорит Джон Скит вего ответ.В частности, в статье объясняется (выделение добавлено):

In-Proc SxS не решает проблемы совместимости, с которыми сталкиваются разработчики библиотек. Любые библиотеки, непосредственно загруженные приложением - либо с помощью прямой ссылки, либо с помощью Assembly.Load - продолжит загрузку непосредственно в среду выполнения и в AppDomain приложения, загружающего его.Это означает, что если приложение перекомпилируется для запуска в среде выполнения .NET Framework 4 и все еще имеет зависимые сборки, построенные для .NET 2.0, эти зависимости также будут загружаться в среде выполнения .NET 4. Поэтому мы по-прежнему рекомендуем тестироватьваши библиотеки против всех версий [фреймворков], которые вы хотите поддерживать.Это одна из причин, по которой мы продолжаем поддерживать наш высокий уровень обратной совместимости.

Но если вам интересны еще более мелкие детали, стоит упомянуть, что один изНовые функции, представленные в версии 4.0 CLR, - это возможность одновременно запускать несколько версий среды выполнения из одного процесса.Это называется «В процессе параллельного выполнения» (или «Inproc SxS», если вы очень крутой) и является очень мощным инструментом.Вы можете прочитать больше об этом здесь в блоге команды CLR.

Вот несколько симпатичных картинок для демонстрационных целей:

Примечаниемодель «слоеного пирога», которая использовалась для создания выпусков .NET 3.0 и 3.5 поверх .NET 2.0.Это означает, что все они будут работать бок о бок без каких-либо проблем.Но изоляция других версий создаст проблему.

Однако, как упоминалось выше, .NET 4.0 решает эту проблему с помощью параллельного выполнения:

Конечно, это в основном применимо к ситуациям, связанным с COM и взаимодействием с внешними приложениями, такими как Outlook, но это все еще очень полезная функция.

Но в любом случае, вы не должны видеть никаких проблем с этим подходом, с совместимостью, производительностью или чем-то еще.

7 голосов
/ 02 июня 2011

Если вы не используете , явно использует SxS, ваша сборка .NET 2 будет загружена в .NET 4 CLR. Никаких проблем с производительностью не должно быть ... код, изначально предназначенный для .NET 2, будет просто запускаться с использованием библиотек .NET 4, CLR и т. Д. И да, вы можете использовать сборку, скомпилированную с .NET 1.1, в Приложение .NET 2 или выше.

Там есть проблема, если вы пытаетесь загрузить сборку смешанного режима (некоторый собственный код, немного IL) в .NET 4, IIRC ... но если это "просто" класс .NET библиотека, с тобой все должно быть в порядке.

...