CLR 2.0 против 4.0 производительности? - PullRequest
4 голосов
/ 14 января 2011

Будет ли .NET-программа, скомпилированная для CLR 2.0, работать быстрее, если работает unden CLR 4.0?

app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0.30319" sku=".NETFramework,Version=v4.0,Profile=Client" />
    <supportedRuntime version="v2.0.50727"/>
  </startup>
</configuration>

Ответы [ 3 ]

7 голосов
/ 14 января 2011

Как правило, нет - оно будет идентичным.

По умолчанию среда CLR 4 загружает среду CLR 2 для выполнения базы кода CLR 2. Принудительное выполнение в CLR 4 требует установки useLegacyV2RuntimeActivationPolicy в вашем приложении.

Если вы добавите этот флаг, он будет работать в версии 4 CLR. В целом, производительность, скорее всего, будет очень похожей, но она может немного отличаться с новым временем выполнения из-за изменений в JIT и времени выполнения ядра. Нет никаких гарантий, что CLR 4 будет быстрее - иногда он может быть медленнее, хотя в целом я ожидал бы, что производительность будет очень близка в обеих средах выполнения.

Если у вас проблемы с производительностью, профилируйте приложение. Изменение времени выполнения не устранит проблему с производительностью. Однако профилирование вашего приложения во время работы под обоими будет единственным способом узнать, имеет ли это для вас значение.

0 голосов
/ 24 мая 2013

Обычно: Нет .

В паре угловых случаев была улучшена производительность, т. Е. Если приложение затопит ThreadPool небольшими кусочками работы, тогда оптимизация кражи работы ThreadPool станет большим выигрышем , Это также может существенно изменить порядок выполнения работы, поэтому некоторые приложения, которые случайно полагаются на порядок, могут вылетать.

Существуют похожие виды угловых случаев на заднем плане GC (сжатие объектов среднего размера) и Interop (изменения блокировки объектов).

Резюме

Если производительность приложения .NET 3.5 (CLR 2.x) хуже ожидаемой, попробуйте приложение на .NET 4.5 (CLR 4.x).

0 голосов
/ 14 января 2011

Вообще говоря, не заметно.Все среды выполнения обратно совместимы, и библиотеки AFAIK, найденные в более старых версиях, были изменены только в случае изменения спецификации языка (например, добавление поддержки ковариации / контравариантности) или если это было определено как реальная ошибка памяти / ЦП.

...