Влияние неиспользуемых методов и свойств на библиотеку или исполняемый файл - PullRequest
5 голосов
/ 22 января 2010

Я играю с созданием генератора исходного кода для C # (.NET). Приведет ли генерация свойств или методов, которые никогда не будут вызываться, к замедлению выполнения моего кода? Как насчет вставки операторов using для библиотек, которые не используются?

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

Ответы [ 3 ]

6 голосов
/ 23 января 2010

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

JIT-компилятор будет всегда генерировать код только для методов, которые фактически вызываются.Таким образом, у вас не будет никакого машинного кода или накладных расходов времени компиляции из-за кода, который никогда не используется.

CLR указывает на ваш исполняемый образ ссылку на файл, отображенный в памяти.ОЗУ будет использоваться только в том случае, если в CLR используется фактическое содержимое библиотеки DLL.Это зависит от того, как IL методов, которые вы используете, распространяется через изображение.Есть разумные шансы, что, поскольку JIT-компилятор никогда не ссылается на IL, данные изображения также не будут выгружаться в ОЗУ.Другими словами, вы потеряете некоторое пространство виртуальной памяти, но не будете использовать соответствующий объем оперативной памяти.

Если ваша DLL имеет строгое имя и хранится в ненадежном месте, то время горячей загрузки будетнемного длиннее из-за большего размера файла.

5 голосов
/ 22 января 2010

Неиспользуемые методы сделают исполняемый файл немного больше.Загрузка займет немного больше времени и потребит больше системной памяти.

Если приложение работает в среде с ограниченным объемом памяти, вы можете увидеть небольшое снижение производительности.

Помимо этоговы не должны видеть снижение производительности.

Операторы «using» просто позволяют вам писать более короткие версии имен классов в вашем исходном коде.Они не влияют на размер файла или скорость выполнения.

Существуют сторонние компоновщики, которые могут удалять не связанные методы из окончательного .EXE.

4 голосов
/ 22 января 2010

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

...