Почему вы должны удалить ненужные C # с помощью директив? - PullRequest
211 голосов
/ 26 сентября 2008

Например, мне редко нужно:

using System.Text;

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

Кроме того, имеет ли какое-либо значение, если одна и та же директива using используется только в одном файле против большинства / всех файлов?


Редактировать: обратите внимание, что этот вопрос не о несвязанной концепции, называемой с помощью оператора , предназначенной для того, чтобы помочь человеку управлять ресурсами, гарантируя, что когда объект выходит из области видимости, его IDisposable.Dispose метод вызывается. Смотрите Использование "использования" в C # .

Ответы [ 14 ]

461 голосов
/ 26 сентября 2008

Там есть несколько причин для удаления неиспользуемых пространств / имен, кроме предпочтений кодирования:

  • удаление неиспользуемых выражений using в проекте может ускорить компиляцию, поскольку у компилятора меньше пространств имен для поиска типов для разрешения. (это особенно верно для C # 3.0 из-за методов расширения, где компилятор должен искать во всех пространствах имен методы расширения для возможных лучших соответствий, вывода обобщенных типов и лямбда-выражений, включающих обобщенные типы)
  • потенциально может помочь избежать конфликта имен в будущих сборках, когда новые типы добавляются в неиспользуемые пространства имен, имена которых совпадают с именами некоторых типов в используемых пространствах имен.
  • уменьшит количество элементов в списке автозавершения редактора при кодировании, что, возможно, приведет к более быстрой печати (в C # 3.0 это также может уменьшить список показанных методов расширения)

Что не удаляет неиспользуемые пространства имен не делает:

  • каким-либо образом изменить вывод компилятора.
  • каким-либо образом изменить выполнение скомпилированной программы (более быстрая загрузка или более высокая производительность).

Получившаяся сборка такая же, с неиспользованным использованием или без него, с удалением (-ями).

176 голосов
/ 26 сентября 2008

Это ничего не изменит при запуске вашей программы. Все, что нужно, загружается по требованию. Таким образом, даже если у вас есть оператор using, если только вы не используете тип в этом пространстве имен / сборке, сборка, для которой используется оператор using, не будет загружена.

В основном, это просто для очистки по личным предпочтениям.

36 голосов
/ 26 сентября 2008

Код чистоты это важно.

Начинает складываться ощущение, что код может не поддерживаться и на пути к полю бровей, когда видишь лишние использования. По сути, когда я вижу какие-то неиспользуемые операторы, в моем мозгу поднимается маленький желтый флажок, говорящий мне «действовать осторожно». И чтение производственного кода никогда не должно вызывать у вас такого чувства.

Так что приберись. Не будь неряшливым. Вдохновлять уверенность. Сделайте ваш код красивым. Дайте другому разработчику это теплое нечеткое чувство.

30 голосов
/ 26 сентября 2008

Не существует конструкции IL, соответствующей using. Таким образом, операторы using не увеличивают объем памяти вашего приложения, поскольку для него нет кода или данных.

Using используется во время компиляции только в целях преобразования коротких имен типов в полные имена типов. Таким образом, единственный отрицательный эффект, который может не понадобиться using, это немного замедляет время компиляции и занимает немного больше памяти во время компиляции. Я бы не волновался об этом.

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

4 голосов
/ 26 сентября 2008

Вы можете столкнуться с именами, если вы называете свои классы как (неиспользуемые) классы в пространстве имен. В случае System.Text у вас возникнет проблема, если вы определите класс с именем «Кодировщик».

В любом случае это обычно небольшая проблема, обнаруживаемая компилятором.

2 голосов
/ 08 июня 2018

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

2 голосов
/ 26 сентября 2008

Оставить лишние using директивы в порядке. Их удаление мало, но не так много. Например, это делает мои списки завершений IntelliSense короче, и поэтому легче ориентироваться.

На скомпилированные сборки не влияют посторонние директивы using.

Иногда я помещаю их внутрь #region и оставляю их свернутыми; это делает просмотр файла немного чище. ИМО, это одно из немногих хороших применений #region.

2 голосов
/ 26 сентября 2008

В основном это личные предпочтения. Я убираю их сам (Resharper хорошо говорит мне, когда нет необходимости использовать операторы).

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

2 голосов
/ 26 сентября 2008

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

1 голос
/ 25 февраля 2014

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

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

Если у вас есть неиспользуемые пространства имен, это ничего не значит при запуске поиска.

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

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

Я не могу придумать более простой способ сделать это все сразу.

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

...