Maison > développement back-end > C++ > Pourquoi l'opérateur 'as' de C# est-il plus lent que le casting traditionnel dans ce test de sommation entière Nullable ?

Pourquoi l'opérateur 'as' de C# est-il plus lent que le casting traditionnel dans ce test de sommation entière Nullable ?

Linda Hamilton
Libérer: 2025-01-07 09:11:40
original
255 Les gens l'ont consulté

Why is C#'s

Surprise de performances avec les types "as" et nullables

Arrière-plan

Le "as" L’opérateur en C# permet une vérification de type dynamique et une conversion sécurisée. Cela peut potentiellement améliorer les performances par rapport à l'opérateur "is" traditionnel suivi d'un cast. Cependant, des résultats de performances inattendus ont été observés dans un cas de test récent.

Application de test et résultats

Une application de test a été développée pour additionner les entiers d'un tableau d'objets contenant des références nulles. , les références de chaîne et les entiers encadrés. L'application a utilisé trois approches : "Cast" (équivalent C# 1), "As" (en utilisant l'opérateur "as") et "LINQ" (en utilisant la méthode d'extension OfType()). Étonnamment, l'approche « Cast » était nettement plus rapide que l'approche « As », qui à son tour était légèrement plus lente que l'approche « LINQ ».

Analyse

L'approche Le compilateur JIT peut générer du code très efficace pour l'approche « Cast » car il utilise la conversion de valeurs en mémoire. L'objet ne peut être déballé qu'en une variable du même type que la valeur encadrée, ce qui simplifie le processus de conversion.

L'approche "As" nécessite une conversion en Nullable car la représentation de la valeur de l'entier encadré n'est pas compatible avec la disposition de la mémoire de Nullable. Cela se fait via une fonction d'assistance, JIT_Unbox_Nullable, qui introduit une surcharge supplémentaire.

L'approche "LINQ" utilise l'opérateur "is" et une conversion générique via la fonction d'assistance JIT_Unbox(). Bien qu'il fonctionne légèrement mieux que l'approche "As", il est toujours plus lent en raison des optimisations de ngen.exe.

Conclusion

L'opérateur "as" peut ne pas toujours offrent des avantages en termes de performances par rapport à l'approche « Cast », en particulier dans les situations sensibles aux performances. Bien que l'approche « LINQ » soit une alternative viable, elle peut également rencontrer des limitations de performances. Par conséquent, il est important de considérer le contexte spécifique et de peser les compromis avant de choisir l’approche optimale.

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal