Imaginez code:
// some class
public class obj
{
...
}
public static Dictionary<string, obj> dict = new Dictionary<string, obj>();
public static obj FromDict1(string name)
{
if (dict.ContainsKey(name))
{
return dict[name];
}
return null;
}
public static obj FromDict2(string name)
{
try
{
return dict[name];
}
catch (KeyNotFoundException)
{
return null;
}
}
J'étais curieux de savoir si il y a une différence dans les performances de ces 2 fonctions, parce que le premier DEVRAIT être plus LENTE que la seconde, étant donné qu'il est nécessaire de vérifier deux fois si le dictionnaire contient une valeur, tandis que la seconde fonction n'a besoin d'accéder au dictionnaire une seule fois, mais WOW, c'est en fait à l'opposé:
Boucle pour 1 000 000 valeurs (avec 100 000 et 900 000 non existant):
première fonction: 306 millisecondes
deuxième fonction: 20483 millisecondes
Pourquoi est-ce?
EDIT: Comme vous pouvez le constater dans les commentaires soufflet à cette question, la performance de la deuxième fonction est en fait légèrement mieux que la première dans le cas où il y a 0 non existant clés. Mais une fois qu'il y a au moins 1 ou plus non-existence de clés, la performance de la deuxième baisse rapidement.