Différence de performances entre IIf() et Si
Dans Visual Basic, est-il une différence de performance lors de l'utilisation de la IIf
fonction de la place de la If
déclaration?
Vous devez vous connecter pour publier un commentaire.
Dans Visual Basic, est-il une différence de performance lors de l'utilisation de la IIf
fonction de la place de la If
déclaration?
Vous devez vous connecter pour publier un commentaire.
VB est la suivante
If
énoncé de la question, je pense:La première est essentiellement de C#opérateur conditionnel ternaire et le second est son confluent de l'opérateur (retour
result
sauf si c'estNothing
, dans lequel cas de retour"Alternative"
).If
a ainsi remplacéIIf
et le dernier est obsolète.Comme en C#, VB conditionnelle
If
opérateur de court-circuits, de sorte que vous pouvez maintenant écrire le code suivant, qui n'est pas possible à l'aide de laIIf
fonction:IIf
.If
est plus efficace que laIIf
fonction de loin.If
fonction... Vous n'avez pas de démontrer comment la syntaxe ou de l'utilisation diffère entreIIf
etIf
That's all you need to know, really
ne ressemble pas à une attitude propice pour un site dédié au partage des connaissances 😉IIf()
fonctionne à la fois le vrai et le faux code. Pour des choses simples comme numérique affectation, ce n'est pas une grosse affaire. Mais pour le code, qui exige que toute sorte de traitement, vous perdez des cycles de l'état qui ne correspond pas, et éventuellement à l'origine d'effets secondaires.Code de l'illustration:
Sorties:
Aussi, un autre gros problème avec l'IIf est qu'il sera fait appel de toutes les fonctions qui sont dans les arguments [1], donc si vous avez une situation comme suit:
Il va réellement lancer une exception, ce qui n'est pas la façon dont la plupart des gens pense que la fonction fonctionne la première fois qu'ils le voient. Cela peut aussi conduire à une certaine très dur pour corriger les bugs dans l'application ainsi.
[1] Fonction IIf - http://msdn.microsoft.com/en-us/library/27ydhh0d(SV.71).aspx
Mieux utiliser Si au lieu de l'IIf à l'utilisation de l'inférence de type mécanisme correctement (Option Infer Sur)
Dans cet exemple, les mots clés est reconnu comme un string quand puis-je utiliser Si :
Sinon, il est reconnu comme un Objet :
Selon ce mec, IIf peut prendre jusqu'à 6x tant que if/then. YMMV.
En plus de cela, la lisibilité devrait probablement être plus fortement préféré que les performances dans ce cas. Même si l'IIF a été plus efficace, c'est tout simplement le moins lisible pour le public cible (je suppose que si vous travaillez dans Visual Basic, vous voulez que d'autres programmeurs pour être en mesure de lire facilement votre code, ce qui est VB est plus grand boon... et qui est perdu avec des concepts comme IIF à mon avis).
Aussi, "IIF est une fonction, par rapport à SI faire partie de l'langues "syntaxe"... ce qui implique, pour moi, que, Si, en effet, serait plus rapide... si rien d'autre que l'instruction if peut être bouilli vers le bas directement à un petit ensemble de opcodes plutôt que d'avoir à aller à un autre espace dans la mémoire pour effectuer la logique trouvé dans ladite fonction. C'est un banal différence, peut-être, mais vaut la peine de noter.
Je crois que la principale différence entre Si et IIf est:
Si(test [boolean], ci statement1, statement2)
cela signifie que, selon la valeur du test soit satement1 ou statement2 sera exécuté
(juste une seule instruction execute)
Dim obj = IIF(test [boolean] , ci statement1, statement2)
cela signifie que les deux énoncés s'exécuter mais selon le test de la valeur de l'un d'eux va retourner une valeur (obj).
donc, si l'un des états lèvera une exception, elle va le jeter dans (IIf) de toute façon, mais (Si), il va le jeter dans le cas que la condition sera de retour à sa valeur.
...comme quoi il peut prendre aussi longtemps que 6x, dit-le wiki:
Essentiellement IIf est l'équivalent d'un opérateur ternaire en C++/C#, de sorte qu'il vous donne un peu de nice 1 ligne si/d'autre type de déclarations, si vous souhaitez qu'il. Vous pouvez aussi lui donner une fonction à évaluer si vous le désirez.
Ces fonctions sont différents!!! Peut-être que vous avez seulement besoin d'utiliser une instruction if.
IIF sera toujours plus lent, car il fera les deux fonctions, plus il fera de la norme, SI l'énoncé.
Si vous vous demandez pourquoi il y a une fonction IIF, peut-être que ce sera explication:
Le compteur sera 2 après cela, mais ce sera "OUI" uniquement. Je sais que ce compteur des trucs inutiles, mais parfois il y a des fonctions que vous aurez besoin à la fois de courir, n'a pas d'importance si SI c'est vrai ou faux, et juste d'attribuer de la valeur à partir de l'un d'entre eux à votre variable.
IIf()
de cette façon est de simplement aller à confondre les gens vous lisent code.