Размер блока.NET влияет на производительность?

27
задан Anthony Mastrean 4 August 2011 в 15:02
поделиться

9 ответов

От Шаблонов Microsoft & Методы Улучшающаяся Производительность приложения.NET и Масштабируемость Глава 5:

Предпочитают, чтобы Единственные Большие блоки, А не Несколько Меньших блоков

помогли уменьшить Ваш application’s рабочий набор, необходимо предпочесть единственные большие блоки, а не несколько меньших блоков. Если у Вас есть несколько блоков, которые всегда загружаются вместе, необходимо объединить их и создать единственный блок.

издержки, связанные с наличием нескольких меньших блоков, могут быть приписаны следующему:

  • стоимость загружающихся метаданных для меньших блоков.
  • Касающиеся различные страницы памяти в предварительно скомпилированных изображениях в CLR для загрузки блока (если это предварительно компилируется с Ngen.exe).
  • время компиляции JIT.
  • Проверки безопасности.

, поскольку Вы оплачиваете только страницы памяти свои доступы программы, большие блоки предоставляют Native Image Generator утилите (Ngen.exe) больший шанс оптимизировать собственное изображение, которое она производит. Лучшее расположение изображения означает, что необходимые данные могут быть размечены более плотно, который в свою очередь означает, что меньше полных страниц необходимо, чтобы сделать задание по сравнению с тем же кодом, размеченным в нескольких блоках.

Иногда Вы не можете постараться не разделять блоки; например, по причинам управления версиями и развертывания. Если необходимо поставить типы отдельно, Вы, возможно, должны разделить блоки.

34
ответ дан Jørn Schou-Rode 28 November 2019 в 05:06
поделиться

Ну, каждый раз, когда блок загружается, будет [приблизительно 110] совершают нападки из-за штрафа разрешения - нахождение правильного файла, потенциально проверяя номер версии и т.д. Это, вероятно, будет, прежде всего, при запуске.

Однако я не полагаю, что это будет значительно влиять на "установившуюся" производительность.

11
ответ дан Jon Skeet 28 November 2019 в 05:06
поделиться

Компактный DLL платформы будет всегда загружаться в пространство минимальной памяти на 64 Кбита, неважно, насколько маленький это. Так, загрузка четырех отдельных CF DLLs на 10 Кбит будет стоить Вам 256 Кбит на устройстве. При объединении их ( ILMerge), он только стоил бы Вам 64 Кбит памяти на устройстве.

6
ответ дан Anthony Mastrean 28 November 2019 в 05:06
поделиться

Я никогда не встречался со значительным хитом к производительности, которую я разыскал или к размеру или к количеству блоков. Подавляющее большинство значительных проблем производительности, которые я разыскал, было результатом алгоритмических слабых мест.

, Поскольку Jon Skeet говорит, вероятно, будет некоторый маленький хит из-за разрешения при запуске. lassevk также имеет точку относительно динамического разрешения блоков через отражение. Никакой из них не должен влиять на производительность несколько раз в течение программы, тем не менее, и в нормальном ходе вещей, который, вероятно, не является значительным хитом производительности, если Вы не работаете при некоторых ужасно строгих ограничениях перфекта.

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

4
ответ дан Greg D 28 November 2019 в 05:06
поделиться

Я высоко сомневаюсь, что это влияет на производительность до любого измеримого градуса. Будет некоторый штраф за загрузку его при запуске; и использование памяти будет, вероятно, увеличено МБ или два, но кроме этого - нет. Ну, если Вы не делаете код, который страдает из-за этого сами.

Однако я не видел тестов, таким образом, я мог бы быть неправым.

1
ответ дан Vilx- 28 November 2019 в 05:06
поделиться

Одна вещь, которую я знаю, будет влиять на производительность относительно размера блока, по крайней мере, если размер блока будет связан с количеством классов, методов, и т.д.

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

А-ч, видел ответ Jon, забыл упоминать. JIT'ing кода только произойдет однажды на часть кода, конечно, поэтому если все, что Вы делаете, будет отражением по типам, и никогда не касайтесь их послесловия, то размер блока будет влиять на продолжительность того отражательного цикла, но после этого это не должно иметь значения вообще.

0
ответ дан angry person 28 November 2019 в 05:06
поделиться

Нет, это не влияет

-2
ответ дан Samiksha 28 November 2019 в 05:06
поделиться

Я согласен с ответом Дэна и просто хочу добавить немного дополнительной информации: вот еще одно сообщение в блоге, подтверждающее эту точку зрения: http://blogs.msdn.com/junfeng/ archive / 2004/02/23 / 78139.aspx

0
ответ дан 28 November 2019 в 05:06
поделиться

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

-3
ответ дан 28 November 2019 в 05:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: