Как на производительность влияет неиспользованная директива using?


110

Visual Studio будет автоматически создавать операторы using каждый раз, когда вы создаете новую страницу или проект. Некоторые из них вы никогда не будете использовать.

В Visual Studio есть полезная функция «удалить неиспользуемые использования».

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


Я поискал его перед тем, как спросить, но он не появился.
KdgDev

6
FWIW, у этой публикации лучше SEO: для меня это был первый результат в Google. Из двух связанных оригиналов один недоступен (удален), а другой сформулирован достаточно по-разному, чтобы добавить некоторую ценность этому сообщению, даже если это просто перенаправление.
DaveD 02

@DaveD первым для вас, потому что Google знает ваши точные предпочтения и историю поиска. В компе моего друга был не первый.
ilias iliadis

Ответы:


133

Неиспользованное использование не влияет на производительность вашего приложения во время выполнения.

Это может повлиять на производительность IDE и общую фазу компиляции. Причина в том, что он создает дополнительное пространство имен, в котором должно происходить разрешение имен. Однако они, как правило, незначительны и не должны оказывать заметного влияния на вашу среду IDE для большинства сценариев.

Это также может повлиять на производительность вычисления выражений в отладчике по тем же причинам.


39
Чем больше будет применений, тем медленнее будет работать Intellisense
Riegardt Steyn

14

Нет, это просто стиль компиляции / кодирования. Бинарные файлы .NET используют полностью определенные имена под капотом.


3
Означает ли это, что более длинные имена классов и методов имеют небольшое, но реальное (если неизмеримое) влияние на время JIT-компиляции?
Джаред Апдайк

8

Не влияет на скорость выполнения, но может немного повлиять на скорость компиляции / intellisense, поскольку существует больше потенциальных пространств имен для поиска подходящего класса. Я бы не стал особо беспокоиться об этом, но вы можете использовать пункт меню «Организовать использование», чтобы удалить и отсортировать операторы using.


8

Следующая ссылка Хорошее чтение о том, почему нужно удалять неиспользуемые ссылки объясняет, как полезно удалять неиспользуемые ссылки из приложения.

Ниже приведены некоторые выдержки из ссылки:

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

  2. Еще одно преимущество удаления неиспользуемых ссылок состоит в том, что вы снижаете риск конфликтов с пространствами имен. Например, если у вас есть и то, System.Drawingи другое System.Web.UI.WebControls, вы можете обнаружить конфликты при попытке сослаться на Imageкласс. Если в вашем классе есть директивы using, соответствующие этим ссылкам, компилятор не может сказать, какие из них использовать. Если вы регулярно используете автозаполнение при разработке, удаление неиспользуемых пространств имен уменьшит количество значений автозаполнения в текстовом редакторе по мере ввода.


5

Нет, компиляция программы включает несколько процессов. Когда компилятор начнет искать ссылки (классы, методы), он будет использовать только те, которые используются в коде. Директива using только сообщает компилятору, где искать. Многие неиспользуемые операторы using могут иметь проблемы с производительностью, но только во время компиляции. Во время выполнения весь внешний код правильно связан или включен как часть двоичного файла.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.