Dans Visual Basic, existe-t-il une différence de performances lors de l'utilisation de la IIf
fonction au lieu de l' If
instruction?
vb.net
if-statement
iif-function
Bryan Roth
la source
la source
IIf
.If
estIIf
de loin plus efficace que la fonction.That's all you need to know, really
cela ne semble pas être une attitude propice pour un site Web consacré au partage des connaissances;)IIf()
exécute à la fois le code vrai et faux. Pour des choses simples comme l'affectation numérique, ce n'est pas un gros problème. Mais pour le code qui nécessite n'importe quel type de traitement, vous perdez des cycles à exécuter la condition qui ne correspond pas et causez peut-être des effets secondaires.Illustration du code:
Les sorties:
la source
De plus, un autre gros problème avec IIf est qu'il appellera en fait toutes les fonctions qui sont dans les arguments [1], donc si vous avez une situation comme celle-ci:
Cela lèvera en fait une exception, ce qui n'est pas la façon dont la plupart des gens pensent que la fonction fonctionne la première fois qu'ils la voient. Cela peut également conduire à des bogues très difficiles à corriger dans une application.
[1] Fonction IIf - http://msdn.microsoft.com/en-us/library/27ydhh0d(VS.71).aspx
la source
Mieux vaut utiliser If au lieu de IIf pour utiliser correctement le mécanisme d'inférence de type (Option Infer On)
Dans cet exemple, les mots clés sont reconnus comme une chaîne lorsque j'utilise If:
Sinon, il est reconnu comme un objet:
la source
Selon ce type , IIf peut prendre jusqu'à 6 fois plus longtemps que If / Then. YMMV.
la source
En plus de cela, la lisibilité devrait probablement être plus préférée que les performances dans ce cas. Même si IIF était plus efficace, il est tout simplement moins lisible pour le public cible (je suppose que si vous travaillez dans Visual Basic, vous voulez que d'autres programmeurs puissent lire facilement votre code, ce qui est le plus grand avantage de VB ... et ce qui est perdu avec des concepts comme IIF à mon avis).
Aussi, "IIF est une fonction, contre IF faisant partie de la syntaxe des langages" ... ce qui m'implique qu'en effet, If serait plus rapide ... si rien d'autre que cela, l'instruction If peut être résumée directement à un petit ensemble d'opcodes plutôt que d'avoir à aller dans un autre espace de la mémoire pour exécuter la logique trouvée dans ladite fonction. C'est peut-être une différence banale, mais à noter.
la source
Je pense que la principale différence entre If et IIf est:
Si (test [booléen], instruction1, instruction2) cela signifie que selon la valeur de test, satement1 ou instruction2 sera exécuté (une seule instruction s'exécutera)
Dim obj = IIF (test [boolean], statement1, statement2) cela signifie que les deux instructions s'exécuteront mais selon la valeur de test l'une d'elles renverra une valeur à (obj).
donc si l'une des instructions lèvera une exception, elle la lancera quand même dans (IIf) mais dans (If) elle la lancera juste au cas où la condition renverrait sa valeur.
la source
... pour savoir pourquoi cela peut prendre jusqu'à 6x, dit le wiki:
Essentiellement IIf est l'équivalent d'un opérateur ternaire en C ++ / C #, donc il vous donne de belles instructions de type if / else sur 1 ligne si vous le souhaitez. Vous pouvez également lui donner une fonction pour évaluer si vous le souhaitez.
la source
Ces fonctions sont différentes! Vous n'avez peut-être besoin que de l'instruction IF. IIF sera toujours plus lent, car il effectuera les deux fonctions plus il fera l'instruction IF standard.
Si vous vous demandez pourquoi il existe une fonction IIF, ce sera peut-être une explication:
Ainsi, le compteur sera 2 après cela, mais s sera "OUI" seulement. Je sais que ce compteur est inutile, mais parfois il y a des fonctions dont vous aurez besoin à la fois pour exécuter, peu importe si IF est vrai ou faux, et attribuez simplement la valeur de l'une d'entre elles à votre variable.
la source
IIf()
de cette manière ne fera que semer la confusion chez les gens qui lisent votre code.