D'après mon expérience, le plus gros surcoût est lié à l'émission d'une exception et à sa gestion. J'ai travaillé une fois sur un projet où un code similaire au suivant était utilisé pour vérifier si quelqu'un avait le droit de modifier un objet. Cette méthode HasRight() était utilisée partout dans la couche de présentation, et était souvent appelée pour des centaines d'objets.
bool HasRight(string rightName, DomainObject obj) {
try {
CheckRight(rightName, obj);
return true;
}
catch (Exception ex) {
return false;
}
}
void CheckRight(string rightName, DomainObject obj) {
if (!_user.Rights.Contains(rightName))
throw new Exception();
}
Lorsque la base de données de test s'est remplie de données de test, cela a entraîné un ralentissement très visible lors de l'ouverture de nouveaux formulaires, etc.
Je l'ai donc remanié comme suit, ce qui - selon les mesures rapides et sales effectuées ultérieurement - est environ deux ordres de grandeur plus rapide :
bool HasRight(string rightName, DomainObject obj) {
return _user.Rights.Contains(rightName);
}
void CheckRight(string rightName, DomainObject obj) {
if (!HasRight(rightName, obj))
throw new Exception();
}
En résumé, l'utilisation d'exceptions dans un flux de processus normal est environ deux ordres de grandeur plus lente que l'utilisation d'un flux de processus similaire sans exceptions.