Performance (Guide de programmation C#)

Mise à jour : Juillet 2008

Le terme performance désigne généralement la vitesse d'exécution d'un programme. Vous pouvez parfois accroître cette vitesse d'exécution en suivant certaines règles élémentaires dans votre code source. Dans certains programmes, il est primordial d'examiner avec soin le code et d'utiliser des profileurs pour s'assurer que l'exécution de ce code est aussi rapide que possible. Dans d'autres programmes, cette optimisation n'est pas nécessaire puisque l'exécution du code est tout aussi acceptable que la qualité de son écriture.

Lorsque vous mesurez des performances et cherchez à les optimiser, vous devez suivre les instructions générales suivantes :

  • Commencez par définir des objectifs de performance et mesurez les performances du programme lorsque votre code ne remplit pas ces objectifs.

  • Veillez à écrire correctement votre code dès le départ, suivez des principes de conception appropriées et déterminer de manière claire vos intentions. Par la suite, optimisez votre code si vous estimez qu'il ne satisfait pas aux objectifs de performance fixés. Un code optimisé à des fins de performance est souvent plus difficile à lire et à maintenir. En règle générale, il est préférable d'écrire un code qui est lisible, robuste et facile à gérer même si ses performances sont légèrement en deçà du code le plus optimisé dont vous rêvez.

  • Si vous devez procéder à une optimisation, commencez par les parties les plus lentes de votre code. Si vous évaluez qu'un programme ne répond pas à vos objectifs de performance, identifiez les emplacements spécifiques où les performances peuvent être améliorées et quels problèmes de performance sont la source principale du problème. L'optimisation d'une méthode rarement appelée n'a pas d'intérêt, tout comme celle d'une méthode A à exécuter en moins de 50 millisecondes si le programme dans son intégralité doit patienter 30 secondes pour exécuter la méthode B sur un autre thread.

Conversions boxing et unboxing

Il vaut mieux éviter d'utiliser des types valeur dans les cas où ils doivent être convertis de nombreuses fois, par exemple dans les classes de collections non génériques comme System.Collections.ArrayList. Vous pouvez éviter la conversion boxing des types valeur en utilisant des collections génériques comme System.Collections.Generic.List<T>. Les conversions boxing et unboxing sont des processus très onéreux en calcul. Lorsqu'un type valeur est converti (boxed), un objet entièrement nouveau doit être créé. Cette opération peut être 20 fois plus longue qu'une simple assignation de référence. Avec la conversion unboxing, le processus de casting peut prendre jusqu'à quatre fois le temps d'une assignation. Pour plus d'informations, consultez Conversions boxing et unboxing.

Chaînes

Lorsque vous concaténez un grand nombre de variables chaîne (par exemple, dans une boucle serrée), utilisez System.Text.StringBuilder à la place de l'opérateur + C#. Pour plus d'informations, consultez Comment : concaténer plusieurs chaînes (Guide de programmation C#).

Destructeurs

Les destructeurs vides ne doivent pas être utilisés. Lorsqu'une classe contient un destructeur, une entrée est créée dans la file d'attente Finalize. Lorsque le destructeur est appelé, le garbage collector est appelé pour traiter la file d'attente. Si le destructeur est vide, cela se solde simplement par une perte de performance. Pour plus d'informations, consultez Destructeurs.

Autres ressources

Voir aussi

Concepts

Guide de programmation C#

Référence

Sécurité (Guide de programmation C#)

Historique des modifications

Date

Historique

Raison

Juillet 2008

Ajout d'informations à la section sur les conversions boxing et unboxing

Améliorations apportées aux informations.

Juillet 2008

Ajout d'une section sur les chaînes.

Améliorations apportées aux informations.

Juillet 2008

Ajout d'informations dans l'introduction.

Améliorations apportées aux informations.