Каковы последствия наличия ненужных ссылок и использования?


12

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

Какой еще аргумент я мог бы выдвинуть (помимо успокоения своего невроза на ОКР) о том, чтобы придерживаться основ? Я думаю, что в основном это системные ссылки, любая ссылка на пользовательскую работу принесет много обратной совместимости. Размер релиза больше? Время компиляции дольше?


5
Обратите внимание, что usings и ссылки не одно и то же. Многие ответы не принимают это во внимание.
фото

1
Если вы хотите сохранить код в чистоте и использовать его по минимуму, подумайте о покупке ReSharper. Удивительное расширение для Visual Studio. Я не могу жить без программы. ;-)
Андерс

Ответы:


13

Intellisense будет гораздо полезнее для вас, если вы соблюдаете usingминимум, и это большое преимущество.

Кроме этого, я не думаю, что есть какая-либо выгода. Так что, возможно, компилятор C # будет работать быстрее, скажем, на 1%; Ну и что.


1
Совокупное значение этого 1% является значительным ... но, по сути, вы ожидаете, что компилятор оптимизирует любую проблему. Однако у меня нет проблем с простой уборкой
Murph

C # IntelliSense все равно немного запутался с 2005 года, когда они начали выкладывать абсолютно все в список.
Рей Миясака

@ReiMiyasaka, чтобы вы могли получить IntelliSense для чего угодно, а затем Ctrl+.быстро исправить «Добавить пространство имен XYZ»
kizzx2

1
@Murph: независимо от того, насколько большим будет накопленное значение в 1%, оно все равно будет составлять 1% от общего количества, поэтому оно всегда будет несущественным. Кроме того, компилятор не может игнорировать любые usings, пока не выяснит, что они на самом деле не нужны, но он не может это выяснить, если сначала не скомпилировал весь ваш исходный файл. Как и в случае ссылок на проекты, они не отбрасываются только потому, что они, кажется, не используются, потому что они могут использоваться динамическим (не обнаруживаемым во время компиляции) способом.
Майк Накис

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

9

Поскольку это практически тривиально в Visual Studio (простой щелчок правой кнопкой мыши), почему бы не сделать это?

Это согласуется с бритвой Оккама , это просто хорошая разработка.

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

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


+1, есть надстройка, которая может сделать это для всего решения. Это также напомнило мне видео ClojureScript и Google Closure, где важна оптимизация всей программы, поскольку типичная веб-страница сейчас занимает около 1 МБ. Это хорошая привычка - чистить вещи, которые не нужны.
Работа

6

usingоператоры просто позволяют компилятору полностью ссылаться на классы и т. д. Дополнительные usingоператоры не окажут заметного влияния на время компиляции.

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

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


Очистка с помощью встроенной функции VS 2010 (я думаю, что 2008 тоже). И ReSharper может делать ссылки тоже. Но да, прежде чем приступить к какой-либо крупномасштабной очистке, я хотел бы использовать инструмент, чтобы сделать это для меня.
MPelletier

+1 за четкое выражение различия между usingнеиспользованными ссылками и неиспользованными ссылками. Два очень разные!
фото

1

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

Редактировать - согласно действительному комментарию Phoog ниже: приложение все равно будет работать, если DLL не используется и не требуется поставляться с приложением только потому, что оно было добавлено в ссылки. Чтобы позаботиться о неиспользуемых ссылках в коде, вы можете посмотреть: Удаление неиспользуемых ссылок .


1
Если ссылка не используется, вам не понадобится DLL, когда и где вы запускаете программное обеспечение.
фото

@phoog, спасибо за ваш комментарий. По крайней мере, в .NET VS2010, если вы вручную добавляете ссылку на решение, DLL физически добавляется в папку bin, даже если вы не используете ее в коде.
NoChance

1
Но если вы удалите DLL из папки bin или опубликуете приложение без DLL, приложение все равно должно запуститься.
Phoog

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