114
rada
Należy przeanalizować kod i sprawdzić, w którym miejscu kodu traci się najwięcej czasu. Może się wydawać na przykład, że cały czas jest wykorzystywany na rozdzielanie napisu na leksemy, a potem możemy odkryć, że 90% tego czasu zabiera kopiowanie napisów. W takiej sytuacji dziesięciokrotne przyspieszenie analizatora nie będzie miało takiego wpływu, jak zmniejszenie czasu kopiowania napisów. Często kod zwalnia nie tam, gdzie sądzimy.
Na rynku istnieje kilka programów do analizowania charakterystyki kodu. Rozważmy zakup jednego z nich.
115
pisanie szybkiego kodu
Kod źródłowy
stoperStart = clock(); for(j =0;j<1000;j++)
for(int i=0;i<g_cStopnie;i++)
dbIT += tryg.DblSinusTW(i); dbIT += tryg.DblCosinusTW(i);
stoperStop = clock(); cout « dbIT « '\n';
Należy przeanalizować charakterystykę kodu, aby określić, gdzie znajdują się wąskie gardła i gdzie traci się czas. Za pomocą oprzyrządowania należy porównać kilka technik, w celu znalezienia najszybszej z nich.
Należy przetestować czas działania dla dużych prób, po 1000 lub 100 000 powtórzeń, tak aby uśrednić koszt wykonania i zakłócenia, oraz zwiększyć stabilność wyników. Należy ustawić czas na tyle duży, aby mógł być mierzony w milisekundach (lub jakiejś większej jednostce czasu).
Dygresja
Upewnijmy się, że porównujemy jabłka z jabłkami. Na przykład testując fragment „Przed” we wskazówce 126., wstępnie zdecydowaliśmy, że obsługa typów niewbudo-wanych będzie realizowana za pomocą wywołania, a typów wbudowanych — bezpo-