Maison >développement back-end >C++ >L'opérateur « as » offre-t-il toujours des avantages en termes de performances par rapport à « is » pour les types nullables en C# ?
Dans le chapitre 4 de C# en profondeur, les types nullables et l'opérateur "as" sont abordés. Plus précisément, on s'attend à ce que l'utilisation de « as » pour la vérification de type puisse améliorer les performances par rapport aux vérifications et au casting « is » traditionnels, car cela simplifie le processus en une seule vérification de type et une seule vérification de valeur. Cependant, un résultat surprenant a été observé.
Pour évaluer les performances, un test de référence a été effectué, qui impliquait la somme d'entiers dans un tableau d'objets comprenant de nombreuses références nulles et références de chaîne. . Le test a mesuré le temps d'exécution des extraits de code suivants :
Au grand étonnement du chercheur, le code C# 1 a surpassé de loin le code "as" et le code LINQ.
L'écart de performances est attribué aux facteurs suivants :
JIT Optimisation du compilateur pour "is" et Casting :
Le test de l'opérateur "is" et le casting ultérieur peuvent être optimisés par le compilateur JIT, ce qui donne lieu à un code machine très efficace qui s'exécute dans un nombre minimal d'instructions. Cette optimisation est possible car le type de valeur encadré peut être directement déballé dans une variable du même type sans aucune conversion ni copie de valeur.
Complexité de la conversion en Nullable
Casting en int ? l'utilisation de "as" nécessite un processus de conversion plus complexe car la représentation de la valeur de l'entier encadré diffère de la disposition de la mémoire de Nullable
Comportement inattendu de LINQ :
Le OfType () dans LINQ utilise également l'opérateur "is" et la fonction d'assistance JIT_Unbox(). Cependant, ses performances étaient comparables à celles de la distribution "as" sur Nullable
Bien que l'opérateur "as" fournisse un moyen pratique d'effectuer une vérification de type et une gestion des valeurs nullables, ses caractéristiques de performances sous des scénarios spécifiques peuvent ne pas toujours se dérouler comme prévu. Le code optimisé généré pour "is" et le casting en C# 1 reste nettement plus rapide dans les cas impliquant de nombreuses opérations de unboxing, soulignant l'importance de prendre en compte les implications en termes de performances lors de la sélection des techniques de codage.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!