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
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!