Почему вы должны удалить ненужные C# с помощью директив?


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

using System.Text;

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

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


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

14 200

14 ответов:

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

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

здесь are несколько причин для удаления неиспользуемых using (s)/namespaces, помимо предпочтения кодирования:

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

что удаление неиспользуемых пространств имен не do:

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

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

чистота кода и важно.

У вас начинает возникать ощущение, что код может быть не поддержан и на пути browfield, когда вы видите лишние использования. В сущности, когда я вижу некоторые неиспользуемые операторы using, маленький желтый флаг поднимается в задней части моего мозга, говоря мне: "действуйте осторожно."И чтение производственного кода никогда не должно давать вам такого чувства.

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

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

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

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

У вас могут быть конфликты имен, если вы вызываете свои классы, такие как (неиспользуемые) классы в пространстве имен. В случае с системой.Текст, у вас будет проблема, если вы определите класс с именем "Encoder".

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

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

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

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

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

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

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

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

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

удаление неиспользуемых просто делает ваш код чище.

оператор using просто не позволяет вам квалифицировать типы, которые вы используете. Я лично люблю их убирать. На самом деле это зависит от того, как используется метрика loc

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

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

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

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

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

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

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

оператор 'using' не влияет на производительность, так как это просто помощник в квалификации имен ваших идентификаторов. Поэтому вместо того, чтобы вводить,System. IO. Path. Combine(...), Вы можете просто ввести,путь.Объединять.(..) Если у вас использование System.IO.

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