¿Cuáles son las consecuencias de tener referencias y usos innecesarios?

12

Soy un poco fanático y tiendo a mantener mis proyectos limpiando referencias y usings en cada clase para mantener solo lo que realmente se usa.

¿Qué otro argumento podría hacer (además de calmar mi nervio TOC) para mantener lo esencial? Estoy pensando principalmente en referencias del sistema, cualquier referencia al trabajo personalizado traerá muchos problemas de compatibilidad con versiones anteriores. ¿La huella de lanzamiento es más grande? ¿Tiempo de compilación más largo?

MPelletier
fuente
55
Tenga en cuenta que usingsy referencias no son lo mismo. Muchas de las respuestas no toman eso en cuenta.
phoog
1
Si desea mantener el código limpio y usarlo al mínimo, considere comprar ReSharper. Increíble extensión de Visual Studio. No puedo vivir / programar sin. ;-)
Anders

Respuestas:

13

Intellisense será mucho más útil para usted si lo mantiene usingal mínimo, y eso es una gran ventaja.

Aparte de eso, no creo que haya ninguna ganancia. Entonces, tal vez el compilador de C # funcione más rápido, digamos, 1%; Y qué.

Mike Nakis
fuente
1
El valor acumulativo de ese 1% es considerable ... pero fundamentalmente esperarías que el compilador optimice cualquier problema. Sin embargo, no tengo ningún problema con simplemente estar ordenado
Murph
C # IntelliSense ha sido un poco desordenado de todos modos desde alrededor de 2005, cuando comenzaron a incluir absolutamente todo en la lista.
Rei Miyasaka
@ReiMiyasaka para que obtenga IntelliSense para lo que quiera y luego haga Ctrl+.una solución rápida "Agregar espacio de nombres XYZ"
kizzx2
1
@Murph: no importa cuán grande sea el valor acumulado del 1%, seguirá siendo el 1% del total acumulado, por lo que siempre será intrascendente. Además, el compilador no puede ignorar ningún mensaje de correo usingelectrónico hasta que haya descubierto que de hecho son innecesarios, pero no puede resolverlo a menos que haya compilado todo su archivo fuente primero. Al igual que con las referencias de proyectos, no se descartan solo porque no parecen usarse, porque podrían usarse de forma dinámica (no detectable en tiempo de compilación).
Mike Nakis
1
Un poco tarde, pero en mi caso estamos creando una aplicación para un dispositivo de recursos muy limitados. Agregar referencias innecesarias afectará el tamaño final de la aplicación. Y bien, trataremos de distribuir el paquete y competir contra otros paquetes, un paquete más grande puede hacer que el usuario piense dos veces antes de descargar o no la aplicación.
hmadrigal
9

Dado que es prácticamente trivial lograr esto en Visual Studio (simple clic derecho), ¿por qué no hacerlo?

Esto es consistente con la Navaja de Occam , es simplemente una buena ingeniería.

En cuanto a las consecuencias de no hacerlo, considere lo que sucede si algún otro desarrollador intenta abrir su proyecto y contiene una referencia (no utilizada) a una biblioteca que él / ella no tiene en su computadora. Ahora, ese desarrollador pobre necesita descubrir por qué existe esa referencia no resuelta y qué hacer al respecto.

Si lo prefiere, considérelo en términos de la regla de oro. ¿Le gustaría asumir el desarrollo de un proyecto que tenía muchas referencias a bibliotecas que no tenía en su computadora y que no tenía idea de por qué están allí?

JonnyBoats
fuente
+1, hay un complemento que puede hacer esto para toda la solución. Esto también me recordó a ClojureScript y el video de Google Closure, donde la optimización de todo el programa es importante ya que una página web típica ahora tiene aproximadamente 1 MB. Es un buen hábito tener: limpiar cosas que no son necesarias.
Trabajo
6

usinglas declaraciones son simplemente para que el compilador pueda hacer referencia completa a clases, etc. Las usingdeclaraciones adicionales no tendrán un efecto apreciable en el tiempo de compilación.

Además, el tiempo de ejecución no cargará un ensamblado referenciado hasta que sea realmente necesario, por lo que nuevamente no creo que haya ninguna consecuencia negativa de referencias innecesarias.

Si usa una herramienta como Reflector, la búsqueda y eliminación de estos bits innecesarios puede automatizarse en su mayoría, por lo que diría que es un desperdicio dedicar mucho tiempo a estas actividades. Por ejemplo, una o dos horas eliminando manualmente las usingdeclaraciones innecesarias más de lo que paga una licencia Reflector, y viene con muchas otras características que mejoran la productividad.

quentin-starin
fuente
La limpieza usando es una característica incorporada de VS 2010 (creo que 2008 también). Y ReSharper también puede hacer las referencias. Pero sí, antes de embarcarme en una limpieza a gran escala, buscaría usar una herramienta para hacer esto por mí.
MPelletier
+1 para expresar claramente la distinción entre usingsy no utilizados y referencias no utilizadas. ¡Los dos son muy diferentes!
phoog
1

Además de lo anterior, supongo que todavía no se mencionó aquí que cada referencia requiere un componente dentro del marco .NET o una DLL externa. Si se hace referencia a una DLL externa, necesitará tenerla cuando (y dónde) ejecute el software.

Editar: según el comentario válido de phoog a continuación: La aplicación aún se ejecutaría si no se usa la DLL y no se requiere que se envíe con la aplicación solo porque se agregó a las referencias. Para ocuparse de las referencias no utilizadas en el código, puede consultar: Eliminar referencias no utilizadas .

Ninguna posibilidad
fuente
1
Si la referencia no se usa, no necesitará la DLL cuando y donde ejecute el software.
phoog
@phoog, gracias por tu comentario. Al menos en .NET VS2010, si agrega manualmente una referencia a la solución, la DLL se agrega físicamente a la carpeta bin incluso si no la usa en el código.
NoChance
1
Pero, si elimina la DLL de la carpeta bin o publica la aplicación sin la DLL, la aplicación aún debería ejecutarse.
phoog
@phoog, tienes razón, gracias por señalar esto. Editaré la publicación.
NoChance