Оптимизация компилятора С# - неиспользуемые методы
Компилятор С# (в VS2008 или VS2010) удаляет неиспользуемые методы при компиляции?
Я предполагаю, что может возникнуть проблема с решением, будут ли использоваться общедоступные методы, поэтому я предполагаю, что он скомпилирует все общедоступные методы.
Но как насчет частных методов, которые никогда не используются внутри класса?
EDIT:
Есть ли набор правил об опцификации компилятора, которые документированы где угодно?
Ответы
Ответ 1
Просто зарегистрирован в рефлекторе с выпуском. Компилятор не удаляет неиспользуемые частные методы.
Существуют способы использования метода без знаний компилятора, например, с отражением. Поэтому компилятор не пытается угадать. Он просто оставляет методы там.
Единственными частными методами, которые удаляет компилятор, являются частичные методы без реализации.
Для оптимизации компилятора С# посмотрите здесь.
Ответ 2
Компилятор не лишает какой-либо метод из сборки, общедоступной или частной. Я мог бы на самом деле вызывать странные проблемы с отражением и предотвращать вызовы во время выполнения таких методов.
Существует множество фреймворков (например, анализатор XAML), которые позволяют вам вызывать частные методы без статических привязок (подумайте о OnClick = "myFunction" в файле XAML). Эта разметка вызовет потенциально закрытый myFunction, когда событие OnClick возникает... Но компилятор не имеет информации о таком поведении во время компиляции.
Динамический код страдает от той же проблемы, генерация IL тоже. И вы можете получить доступ к закрытым методам из любого объекта при выполнении полного доверия.
Ответ 3
Нет, они не будут удалены. Это может дать вам предупреждение за это, но не сделает это сам.
Ответ 4
Эта оптимизация эффективно реализуется на уровне JIT, что хорошо, потому что тогда она работает как для общедоступных, так и для частных/любых методов. Если метод никогда не вызывается (игнорируя ngen и т.д.), Он никогда не получает JITed. Теперь вы можете сказать, что это все еще пустая трата пространства для метаданных и т.д., Но, как указывали другие, частные не настолько частные.