Dziś będzie lżej. Wczorajszy tekst o pisaniu kodu bez ifów spotkał się ze stwierdzeniem „po chuj tak jak to jest nieoptymalne”. Ok, prawda. Kod tak napisanego equals będzie w skrajnym przypadku, czyli z jednym polem, które nigdy nie jest null, wolniejszy o jakiś rząd wielkości. W takim przypadku będzie też, być może, trochę bardziej zagmatwany. Zresztą zwróciłem uwagę na ten problem poruszając kwestię narzędzi do analizy statycznej. Chodziło tam jednak o pokazanie, że można ukryć ifologię i do testów skierować tylko kod, który ma jedną ścieżkę przebiegu.

Dobra, ale co z optymalizacją. Pytanie czy optymalizacja polegająca na eliminowaniu kolejnych opakowań ma sens w typowym przypadku. Załóżmy, że będziemy wstanie urwać 1ms na każdym wywołaniu metody equals. Czy to dużo czy mało?

Poniżej tabelka z przelicznikiem

Operacja Czas wykonania (około) Czas po skalowaniu 1ns → 1s
Dostęp do L1 1ns 1s
Dostęp do RAM 30ns około 30s
Dostęp do dysku (HDD 7200) 4ms około 47 dni
Ping google.com ode mnie z domu średnia dla 10 wywołań 18,6ms około 215 dni

Zatem zanim zaczniemy urywać µs na pojedynczych elementach kodu to może warto popatrzeć na prawdziwe spowalniacze.