Comment les performances sont-elles affectées par une directive using inutilisée?

110

Visual Studio crée automatiquement des instructions using pour vous chaque fois que vous créez une nouvelle page ou un nouveau projet. Vous n'utiliserez jamais certains d'entre eux.

Visual Studio a la fonctionnalité utile pour "supprimer les utilisations inutilisées".

Je me demande s'il y a un effet négatif sur les performances du programme si les instructions using qui ne sont jamais consultées, restent mentionnées en haut du fichier.

KdgDev
la source
Je l'ai cherché avant de le demander, et il ne s'est pas présenté.
KdgDev
6
FWIW, cette publication a un meilleur référencement: c'était le premier résultat dans Google pour moi. Sur les 2 originaux liés, l'un n'est pas disponible (supprimé) et l'autre est rédigé suffisamment différemment pour ajouter de la valeur à ce message, même s'il s'agit simplement d'une redirection.
DaveD
@DaveD d'abord pour vous, car Google connaît vos préférences exactes et votre historique de recherche. Dans l'ordinateur de mon ami n'était pas le premier.
ilias iliadis

Réponses:

133

Une utilisation non utilisée n'a aucun impact sur les performances d'exécution de votre application.

Cela peut affecter les performances de l'EDI et la phase de compilation globale. La raison en est qu'il crée un espace de noms supplémentaire dans lequel la résolution de noms doit avoir lieu. Cependant, ceux-ci ont tendance à être mineurs et ne devraient pas avoir un impact notable sur votre expérience IDE pour la plupart des scénarios.

Cela peut également affecter les performances de l'évaluation des expressions dans le débogueur pour les mêmes raisons.

JaredPar
la source
38
Plus il y a d'utilisations, plus Intellisense sera lent
Riegardt Steyn
14

Non, c'est juste une chose de style de compilation / codage. Les binaires .NET utilisent des noms complets sous le capot.

ChrisV
la source
3
Cela signifie-t-il que les noms de classes et de méthodes plus longs ont un impact faible mais réel (voire incommensurable) sur les temps de compilation JIT?
Jared Updike
8

Aucun effet sur la vitesse d'exécution, mais il peut y avoir un léger effet sur la vitesse de compilation / intellisense car il y a plus d'espaces de noms potentiels pour rechercher la classe appropriée. Je ne m'inquiéterais pas trop à ce sujet, mais vous pouvez utiliser l'élément de menu Organiser les utilisations pour supprimer et trier les instructions using.

Tvanfosson
la source
8

Le lien suivant Une bonne lecture sur pourquoi supprimer les références inutilisées explique comment il est utile de supprimer les références inutilisées de l'application.

Voici quelques extraits du lien:

  1. En supprimant toutes les références inutilisées dans votre application, vous empêchez le CLRde charger les modules référencés inutilisés lors de l'exécution. Ce qui signifie que vous réduirez le temps de démarrage de votre application, car le chargement de chaque module prend du temps et évite que le compilateur charge des métadonnées qui ne seront jamais utilisées. Vous constaterez peut-être qu'en fonction de la taille de chaque bibliothèque, votre temps de démarrage est sensiblement réduit. Cela ne veut pas dire que votre application sera plus rapide une fois chargée, mais il peut être assez pratique de savoir que votre temps de démarrage peut être réduit.

  2. Un autre avantage de la suppression des références inutilisées est que vous réduirez le risque de conflits avec les espaces de noms. Par exemple, si vous avez à la fois System.Drawinget System.Web.UI.WebControlsréférencé, vous pouvez constater que vous obtenez des conflits lorsque vous essayez de référencer la Imageclasse. Si vous avez des directives using dans votre classe qui correspondent à ces références, le compilateur ne peut pas dire laquelle de celles à utiliser. Si vous utilisez régulièrement la saisie semi-automatique lors du développement, la suppression des espaces de noms inutilisés réduira le nombre de valeurs de saisie semi-automatique dans votre éditeur de texte à mesure que vous tapez.

Deepak Tekchandani
la source
5

Non, plusieurs processus sont impliqués lors de la compilation d'un programme. Lorsque le compilateur commencera à rechercher des références (classes, méthodes), il n'utilisera que celles utilisées dans le code. La directive using indique uniquement au compilateur où chercher. Un grand nombre d'instructions using inutilisées pourraient peut-être avoir un problème de performances, mais juste au moment de la compilation. Au moment de l'exécution, tout le code extérieur est correctement lié ou inclus dans le binaire.

Freddy
la source
5

Le code qui ne s'exécute pas n'affecte pas les performances d'un programme.

Jeff Leonard
la source