Вопрос по c#, visual-studio-2010 – Будет ли компилятор только компилировать код, который может быть выполнен?

34

У меня есть библиотека классов, и я использую только ее часть. Нужно ли удалять то, что не используется, чтобы уменьшить размер создаваемого кода (в конфигурации выпуска)?

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

Дополнительная информация: в библиотеке классов есть методы и классы, которые не вызываются из исполняемого кода, но на которые ссылаются другие части кода в библиотеке классов (которые сами никогда не вызываются).

"удаление кода не меняет размер файла .exe" обратите внимание, что файлы .NET .exe обычно округляются до точного количества страниц или нескольких страниц - я забыл, 4K или 16K. Rup
@BradChristie К сожалению, это как минимум$70. ispiro
ILSpy - это бесплатный .NET декомпилятор / рефлектор:wiki.sharpdevelop.net/ILSpy.ashx Это то, что я использовал, чтобы проверить свою мысль, что компилятор содержит мертвый код. Tim S.
Может ли компилятор сказать, что вы никогда не будете распространять эту DLL кому-то, кто может попытаться использовать этот код? Anthony Pegram
Вы всегда можете взять .NET рефлектор и посмотреть, что именно включено в раздел «выпущен». DLL. Лучший способ научиться - это экспериментировать (или таков был мой опыт) Brad Christie

Ваш Ответ

6   ответов
6

называется он или нет. Код может быть вызван внешней библиотекой.

Единственный способ заставить компилятор игнорировать код - использовать директивы препроцессора компилятора. Подробнее о техВот.

Он может быть вызван только из внешней библиотеки, если он является открытым или защищенным членом открытого класса.
0

Utility, Вы создали новый проект и добавили эту библиотеку классов в этот проект. Даже если ваш EXE-файл вызывает только 1-2 метода из библиотеки классов, удаление плохого кода никогда не будет хорошей идеей.

Это пошло бы вразрез с принципом повторного использования. Несмотря на то, что в библиотеке будут присутствовать некоторые классы, на которые нет ссылок из EXE-файла, это не окажет отрицательного влияния на производительность или размер программы.

0

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

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

36

мертвые & quot; код также. Простая причина этого заключается в том, что не всегда возможно точно знать, какой код будет и не будет выполнен. Например, даже закрытый метод, на который никогда не ссылаются, можно вызывать с помощью отражения, а на открытые методы можно ссылаться с помощью внешних сборок.

Вы можете использовать инструмент, который поможет вам найти и удалить неиспользуемые методы (включая те, которые вызываются только другими неиспользуемыми методами). ПытатьсяКакие инструменты и методы вы используете, чтобы найти мертвый код? а такжеНайти неиспользуемый код чтобы вы начали.

0

идеализацию того, что у него есть «математический мир», подобным языку) рекурсивно неразрешимым, в большинстве языков. (Несколько редких, таких как язык Блейза, разрешимы.)

0

что компилятор удалит что-нибудь. Дело в том, что компилятор не может сказать, что используется, а что нет, поскольку экземпляры могут быть созданы, а методы вызваны по имени, благодаря рефлексии.

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