¿Por qué debería eliminar C# innecesario usando directivas?


Por ejemplo, rara vez necesito:

using System.Text;

Pero siempre está ahí por defecto. Asumo que la aplicación usará más memoria si su código contiene innecesario usando directivas. ¿Pero hay algo más que deba saber?

Además, ¿hace alguna diferencia si la misma directiva using se usa en un solo archivo frente a la mayoría/todos los archivos?


Editar: Tenga en cuenta que esta pregunta no se trata del concepto no relacionado llamado usando sentencia , diseñada para ayudar a administrar recursos asegurando que cuando un objeto sale de su ámbito, es identificable.Se llama al método Dispose. Ver Usos de "usar" en C#.

Author: Community, 2008-09-26

14 answers

No cambiará nada cuando se ejecute el programa. Todo lo que se necesita se carga bajo demanda. Así que incluso si tienes esa instrucción usando, a menos que realmente uses un tipo en ese espacio de nombres / ensamblado, el ensamblado con el que se correlaciona la instrucción usando no se cargará.

Principalmente, es solo para limpiar por preferencia personal.

 170
Author: Darren Kopp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-25 21:31:32

Existen pocas razones para eliminar espacios de nombres no utilizados, además de la preferencia de codificación:

  • eliminar las cláusulas de uso no utilizadas en un proyecto, puede hacer que la compilación sea más rápida porque el compilador tiene menos espacios de nombres que buscar tipos para resolver. (esto es especialmente cierto para C# 3.0 debido a los métodos de extensión, donde el compilador debe buscar en todos los espacios de nombres métodos de extensión para posibles mejores coincidencias, inferencia de tipos genéricos y expresiones lambda que involucren tipos genéricos)
  • puede ayudar potencialmente a evitar la colisión de nombres en futuras compilaciones cuando se agregan nuevos tipos a los espacios de nombres no utilizados que tienen el mismo nombre que algunos tipos en los espacios de nombres utilizados.
  • reducirá el número de elementos en la lista de finalización automática del editor al codificar, lo que posiblemente conducirá a una escritura más rápida (en C# 3.0 esto también puede reducir la lista de métodos de extensión mostrados)

Lo que eliminar los espacios de nombres no utilizados no hará :

  • alterar de cualquier manera la salida del compilador.
  • alterar de cualquier manera la ejecución del programa compilado (carga más rápida, o mejor rendimiento).

El conjunto resultante es el mismo con o sin uso(s) eliminado (s).

 444
Author: Pop Catalin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-26 16:03:58

La limpieza del código es importante.

Uno comienza a tener la sensación de que el código puede estar sin mantenimiento y en la ruta del campo browfield cuando ve usos superfluos. En esencia, cuando veo algunas declaraciones de uso no utilizadas, una pequeña bandera amarilla se levanta en la parte posterior de mi cerebro diciéndome que "proceda con precaución."Y leer código de producción nunca debería darte esa sensación.

Así que limpia tus usos. No seas descuidado. Inspire confianza. Haz tu código bonito. Dar otro dev que cálido sentimiento borroso.

 35
Author: core,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-25 22:47:07

No hay construcción IL que corresponda a using. Por lo tanto, las sentencias using no aumentan la memoria de la aplicación, ya que no se genera código o datos para ella.

Using se utiliza en tiempo de compilación solo con el propósito de resolver nombres de tipo cortos a nombres de tipo completamente calificados. Por lo tanto, el único efecto negativo innecesario using puede tener es ralentizar un poco el tiempo de compilación y tomar un poco más de memoria durante la compilación. No me preocuparía por eso. aunque.

Por lo tanto, el único efecto negativo real de tener instrucciones using que no necesita es en intellisense, ya que la lista de posibles coincidencias para completar mientras escribe aumenta.

 30
Author: Franci Penov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-25 21:35:58

Puede tener conflictos de nombres si llama a sus clases como las clases (no utilizadas) en el espacio de nombres. En el caso del Sistema.Text, tendrás un problema si defines una clase llamada "Encoder".

De todos modos esto suele ser un problema menor, y detectado por el compilador.

 4
Author: Pablo Fernandez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-25 21:36:23

Su aplicación no usará más memoria. Es para el compilador para encontrar las clases que se utilizan en los archivos de código. Realmente no duele más allá de no estar limpio.

 2
Author: mattlant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-25 21:31:47

Es preferencia personal principalmente. Los limpio yo mismo (Resharper hace un buen trabajo al decirme cuándo no es necesario usar declaraciones).

Se podría decir que podría disminuir el tiempo de compilación, pero con las velocidades de computadora y compilador en estos días simplemente no haría ningún impacto perceptible.

 2
Author: Josh Sklare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-25 21:53:55

Dejar directivas adicionales using está bien. Hay un poco de valor en eliminarlos, pero no mucho. Por ejemplo, hace que mis listas de finalización de IntelliSense sean más cortas y, por lo tanto, más fáciles de navegar.

Los ensamblados compilados no se ven afectados por directivas using extrañas.

A veces los pongo dentro de un #region, y lo dejo colapsado; esto hace que ver el archivo sea un poco más limpio. IMO, este es uno de los pocos buenos usos de #region.

 2
Author: Jay Bazuzi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-11 18:40:53

Si desea mantener su código limpio, las instrucciones using no utilizadas deben eliminarse del archivo. los beneficios aparecen muy claros cuando trabajas en un equipo colaborativo que necesita entender tu código, piensa que todo tu código debe mantenerse , menos código = menos trabajo, los beneficios son a largo plazo.

 2
Author: Mauricio Sagredo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-08 16:04:09

Solo se usan como atajo. Por ejemplo, tendrías que escribir: System. Int32 cada vez si no tenía un sistema de uso; en la parte superior.

La eliminación de los no utilizados solo hace que su código se vea más limpio.

 1
Author: Carra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-25 21:35:19

La instrucción using solo evita que califiques los tipos que usas. Personalmente me gusta limpiarlos. Realmente depende de cómo se use una métrica loc

 1
Author: CheeZe5,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-25 22:15:45

Tener solo los espacios de nombres que realmente usas te permite mantener tu código documentado.

Puede encontrar fácilmente qué partes de su código se llaman entre sí mediante cualquier herramienta de búsqueda.

Si tiene espacios de nombres sin usar, esto no significa nada cuando ejecuta una búsqueda.

Estoy trabajando en la limpieza de espacios de nombres ahora, porque me preguntan constantemente qué partes de la aplicación están accediendo a los mismos datos de una manera u otra.

Sé qué partes están accediendo a los datos en cada sentido debido a que el acceso a los datos está separado por espacios de nombres, por ejemplo, directamente a través de una base de datos y directamente a través de un servicio web.

No se me ocurre una forma más sencilla de hacer todo esto a la vez.

Si solo quieres que tu código sea una caja negra (para los desarrolladores), entonces sí, no importa. Pero si necesita mantenerlo a lo largo del tiempo, es una documentación valiosa como todo el resto del código.

 1
Author: Timothy Gonzalez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-25 13:52:42

La instrucción 'using' no afecta el rendimiento, ya que es simplemente una ayuda para calificar los nombres de sus identificadores. Así que en lugar de tener que escribir, System.IO.Path.Combine ({) , simplemente puede escribir, Path.Combinar(...) si tiene usando System.IO .

 0
Author: Jordan Parmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-25 21:32:06

No olvides que el compilador hace mucho trabajo para optimizar todo al construir tu proyecto. El uso de que se utiliza en un montón de lugar o 1 no debe hacer una diferente una vez compilado.

 0
Author: Patrick Desjardins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-25 21:32:20