226 votes

Pourquoi devriez-vous supprimer les directives using C# inutiles ?

Par exemple, j'ai rarement besoin de :

using System.Text;

mais il est toujours là par défaut. Je suppose que l'application utilisera plus de mémoire si votre code contient des directives using inutiles. Mais y a-t-il autre chose dont je devrais être conscient?

De plus, est-ce que cela fait une différence quelconque si la même directive using est utilisée dans un seul fichier par rapport à la plupart/de tous les fichiers?


Remarque: Cette question ne concerne pas le concept non lié appelé une déclaration "using", conçue pour aider à gérer les ressources en veillant à ce que lorsque qu'un objet sort du domaine, sa méthode IDisposable.Dispose soit appelée. Voir Utilisations de "using" en C#.

484voto

Pop Catalin Points 25033

Il y a quelques raisons pour supprimer les utilisations/espaces de noms inutilisés, en plus de la préférence en matière de codage:

  • Supprimer les clauses using inutilisées dans un projet peut accélérer la compilation car le compilateur a moins d'espaces de noms à rechercher pour résoudre les types. (ceci est particulièrement vrai pour C# 3.0 en raison des méthodes d'extension, où le compilateur doit rechercher tous les espaces de noms pour trouver les méthodes d'extension pour d'éventuels meilleurs correspondances, l'inférence de types génériques et les expressions lambda impliquant des types génériques)
  • Peut potentiellement aider à éviter les collisions de noms dans les futures constructions lorsque de nouveaux types sont ajoutés aux espaces de noms inutilisés qui ont le même nom que certains types des espaces de noms utilisés.
  • Réduira le nombre d'éléments dans la liste de complétion automatique de l'éditeur lors de la saisie de code, ce qui pourrait conduire à une frappe plus rapide (en C# 3.0, cela peut également réduire la liste des méthodes d'extension affichées)

Ce que la suppression des espaces de noms inutilisés ne fait pas:

  • Modifier de quelque manière que ce soit la sortie du compilateur.
  • Modifier de quelque manière que ce soit l'exécution du programme compilé (chargement plus rapide, ou meilleure performance).

L'assembly résultant est le même avec ou sans les utilisations/espaces de noms inutilisés supprimés.

3 votes

Et en modifiant les fichiers, vous finirez par ajouter de plus en plus d'espaces de noms au début des fichiers. Donc, si vous ne supprimez pas les espaces de noms inutilisés, lorsque vous ouvrirez le fichier, tout ce que vous verrez sera une énorme liste d'espaces de noms au lieu de l'implémentation réelle.

6 votes

En ce qui concerne la compilation plus rapide : Les directives using inutilisées dans les fichiers .cs peuvent vous empêcher de supprimer certaines références d'assemblage non utilisées de votre projet .csproj. Si vous avez une "solution" de nombreux projets, les références inutiles entre les projets obligeront les projets à être compilés dans un ordre spécifique alors qu'ils sont en réalité indépendants et peuvent être compilés en parallèle. Donc supprimez les directives using inutilisées avant de vérifier les références inutilisées de projet dans une solution de plusieurs projets.

1 votes

C'est une excellente explication - à la fin, cela n'a pas grand-chose à voir avec les performances mais plutôt avec les bonnes pratiques. Merci pour l'explication !

183voto

Darren Kopp Points 27704

Cela ne changera rien lorsque votre programme s'exécute. Tout ce qui est nécessaire est chargé à la demande. Donc même si vous avez cette instruction using, à moins que vous n'utilisiez réellement un type dans cet espace de noms / assembly, l'assembly auquel cette instruction using est liée ne sera pas chargé.

Principalement, c'est juste pour nettoyer par préférence personnelle.

72 votes

Mais cela peut affecter le temps de compilation et la réactivité d'Intellisense/IDE.

39voto

Chris Points 8576

La propreté du code est importante.

On commence à avoir le sentiment que le code pourrait ne pas être maintenu et être sur la voie du chantier en friche lorsqu'on voit des using superflus. Fondamentalement, quand je vois des déclarations using inutilisées, un petit drapeau jaune se lève à l'arrière de mon cerveau me disant de "procéder avec prudence". Et lire du code en production ne devrait jamais vous donner ce sentiment.

Alors nettoyez vos using. Ne soyez pas négligent. Inspirez confiance. Rendez votre code joli. Donnez à un autre développeur ce sentiment de bien-être.

0 votes

Maintenant, c'est ce que je voulais entendre :-) J'ai l'habitude de faire un Organiser les instructions -> Supprimer et Trier de temps en temps. Au fait, pour moi, les deux premières options dans Organiser les instructions sont sans importance. Je parle de VS2013 au fait.

30voto

Franci Penov Points 45358

Il n'y a pas de construction IL qui correspond à using. Ainsi, les instructions using n'augmentent pas la mémoire de votre application, car aucun code ou donnée n'est généré pour cela.

Using est utilisé au moment de la compilation uniquement dans le but de résoudre les noms de types courts en noms de types complets. Ainsi, le seul effet négatif des using inutiles est de ralentir un peu la compilation et de consommer un peu plus de mémoire pendant la compilation. Je ne m'en inquiéterais pas cependant.

Ainsi, le seul véritable effet négatif d'avoir des instructions using dont vous n'avez pas besoin se situe au niveau de l'intellisense, car la liste des correspondances potentielles pour la complétion pendant la saisie augmente.

4voto

Pablo Fernandez Points 32003

Vous pouvez rencontrer des conflits de noms si vous appelez vos classes comme les classes (non utilisées) dans l'espace de noms. Dans le cas de System.Text, vous aurez un problème si vous définissez une classe nommée "Encoder".

Quoi qu'il en soit, il s'agit généralement d'un problème mineur, détecté par le compilateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X