Подтвердить что ты не робот

Будет ли компилятор компилировать только код, который может быть выполнен?

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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