úterý 24. ledna 2006

Vrchol neoptimálnosti

Jsou "programátorské perly", které by stálo za to někde vystavit. Jednou z takovýchto "perel" je i následující magický kousek kódu, při jehož čtení vám spadne brada dolu. Soukromě jsem ho nazval "vrchol neoptimálnosti" a to nejsem nějaká citlivka.

private boolean canConvertValue(String fieldName) {
   
for (int i = 11000; i < 16000; i++)
     
if (fieldName.compareTo("Z" + i) == 0) return false;
   
// pokud nic nenajdu, tak muzu konvertovat
   
return true;
}

Tato metoda je navíc v kontextu volána velice neoptimálně. fieldName je název sloupečku v databázi a metoda se volá pro každý vrácený řádek z resultsetu. Co zpracovaný řádek to přibližně 100, slovy jedno sto, volání této metody. Za 50 minut profilování CPU, se v této metodě strávilo 4,75% strojového času. Celkově se pouze v této metodě strávilo 270 sekund. Naštěstí se vlastní SQL volalo za těch 50 minut pouze třiatřicetkrát.