От Шаблонов Microsoft & Методы Улучшающаяся Производительность приложения.NET и Масштабируемость Глава 5:
Предпочитают, чтобы Единственные Большие блоки, А не Несколько Меньших блоков
помогли уменьшить Ваш application’s рабочий набор, необходимо предпочесть единственные большие блоки, а не несколько меньших блоков. Если у Вас есть несколько блоков, которые всегда загружаются вместе, необходимо объединить их и создать единственный блок.
издержки, связанные с наличием нескольких меньших блоков, могут быть приписаны следующему:
, поскольку Вы оплачиваете только страницы памяти свои доступы программы, большие блоки предоставляют Native Image Generator утилите (Ngen.exe) больший шанс оптимизировать собственное изображение, которое она производит. Лучшее расположение изображения означает, что необходимые данные могут быть размечены более плотно, который в свою очередь означает, что меньше полных страниц необходимо, чтобы сделать задание по сравнению с тем же кодом, размеченным в нескольких блоках.
Иногда Вы не можете постараться не разделять блоки; например, по причинам управления версиями и развертывания. Если необходимо поставить типы отдельно, Вы, возможно, должны разделить блоки.
Ну, каждый раз, когда блок загружается, будет [приблизительно 110] совершают нападки из-за штрафа разрешения - нахождение правильного файла, потенциально проверяя номер версии и т.д. Это, вероятно, будет, прежде всего, при запуске.
Однако я не полагаю, что это будет значительно влиять на "установившуюся" производительность.
Компактный DLL платформы будет всегда загружаться в пространство минимальной памяти на 64 Кбита, неважно, насколько маленький это. Так, загрузка четырех отдельных CF DLLs на 10 Кбит будет стоить Вам 256 Кбит на устройстве. При объединении их ( ILMerge), он только стоил бы Вам 64 Кбит памяти на устройстве.
Я никогда не встречался со значительным хитом к производительности, которую я разыскал или к размеру или к количеству блоков. Подавляющее большинство значительных проблем производительности, которые я разыскал, было результатом алгоритмических слабых мест.
, Поскольку Jon Skeet говорит, вероятно, будет некоторый маленький хит из-за разрешения при запуске. lassevk также имеет точку относительно динамического разрешения блоков через отражение. Никакой из них не должен влиять на производительность несколько раз в течение программы, тем не менее, и в нормальном ходе вещей, который, вероятно, не является значительным хитом производительности, если Вы не работаете при некоторых ужасно строгих ограничениях перфекта.
, Возможно, некоторый дополнительный контекст относительно проблемы был бы полезен. Вы задаете этот вопрос, потому что у Вас есть часть программного обеспечения с большим количеством больших блоков, и Вы пытаетесь ускорить его, например?
Я высоко сомневаюсь, что это влияет на производительность до любого измеримого градуса. Будет некоторый штраф за загрузку его при запуске; и использование памяти будет, вероятно, увеличено МБ или два, но кроме этого - нет. Ну, если Вы не делаете код, который страдает из-за этого сами.
Однако я не видел тестов, таким образом, я мог бы быть неправым.
Одна вещь, которую я знаю, будет влиять на производительность относительно размера блока, по крайней мере, если размер блока будет связан с количеством классов, методов, и т.д.
, Если Вы используете отражение и используете цикл как для всех блоков для всех типов в тех блоках, проверьте, есть ли у них атрибуты, и т.д. . Этот мог бы JIT статические конструкторы и называть их в некоторых случаях.
А-ч, видел ответ Jon, забыл упоминать. JIT'ing кода только произойдет однажды на часть кода, конечно, поэтому если все, что Вы делаете, будет отражением по типам, и никогда не касайтесь их послесловия, то размер блока будет влиять на продолжительность того отражательного цикла, но после этого это не должно иметь значения вообще.
Я согласен с ответом Дэна и просто хочу добавить немного дополнительной информации: вот еще одно сообщение в блоге, подтверждающее эту точку зрения: http://blogs.msdn.com/junfeng/ archive / 2004/02/23 / 78139.aspx
Неиспользуемые локальные переменные а ненужные назначения увеличивают размер сборки и снижают производительность.