J'ai un programme qui nécessite des performances rapides. Dans l'une de ses boucles internes, je dois tester le type d'un objet pour voir s'il hérite d'une certaine interface.
Une façon de le faire serait d'utiliser la fonctionnalité intégrée de vérification des types du CLR. La méthode la plus élégante est probablement le mot-clé "is" :
if (obj is ISpecialType)
Une autre approche serait de donner à la classe de base ma propre fonction virtuelle GetType() qui renvoie une valeur d'énumération prédéfinie (dans mon cas, en fait, j'ai seulement besoin d'un bool). Cette méthode serait rapide, mais moins élégante.
J'ai entendu dire qu'il existe une instruction IL spécifique pour le mot clé " is ", mais cela ne signifie pas qu'elle s'exécute rapidement lorsqu'elle est traduite en assembleur natif. Quelqu'un peut-il me donner un aperçu des performances de "is" par rapport à l'autre méthode ?
UPDATE : Merci pour toutes ces réponses éclairées ! Il semble que quelques points utiles soient dispersés parmi les réponses : Le point d'Andrew sur le fait que "est" effectue automatiquement un casting est essentiel, mais les données de performance recueillies par Binary Worrier et Ian sont également extrêmement utiles. Ce serait formidable si l'une des réponses était modifiée pour inclure les points suivants todo de ces informations.