Úterý, únor 28, 2006

Výjimky a výkon

Výjimky by se skutečně měly používat pouze pro výjimečné stavy. Bohužel někdy nás vlastní framework nutí je užít i při standardním toku programu. Klasickým příkladem tohoto nedostatku byla metoda Parse() .NET BCL. V případě, že zpracovávaný string nebylo možno převést na potřebný typ, byla vyvolána výjimka FormatException.  Naštěstí .NET 2.0 přišel s rozšířením a to metodou Int32.TryParse(). Tato nová metoda v případě, že zpracovávaný string nelze převést na příslušný typ, nevyvolá výjimku, ale vrátí pouze false.

Co se týká výkonu, tak je samozřejmě nutné vzít v úvahu s jakou pravděpodobností dojde k selhání metody Parse(). Pokud lze předpokládat, že zpracování string, který neodpovídá potřebnému typu je nepravděpodobné a značí spíše chybu, pak je lepší nepochybně použít mechanizmus výjimek. V opačném případě, kdy u zpracovávaných dat lze očekávat časté selhání metody Parse(), pak je lepší se výjimkám vyhnout a v tomto případě použít Int32.TryParse(). Podle mně dostupné literatury, lze očekávat zrychlení ve stovkách procent. To by pro nikoho nemělo být překvapením, protože vlastní vyvolání výjimky je velmi drahou záležitostí.

Závěr: výjimky používat pouze ve výjimečných stavech (pokud je to možné)!