Benchmark Java Try / Catch Block
Wiem, że wejście do bloku catch ma pewien koszt znaczący podczas wykonywania programu, jednak zastanawiałem się, czy wprowadzenie bloku try {} również nie miało żadnego wpływu, więc zacząłem szukać odpowiedzi w google z wieloma opiniami, ale bez testu porównawczego wszystko. Niektóre odpowiedzi znalazłem:
Wydajność / próba Java, czy zaleca się ograniczenie do minimum tego, co znajduje się w klauzuli try?Wypróbuj Catch Performance JavaBloki próbujące JavaJednak nie odpowiedzieli na moje pytanie faktami, więc postanowiłem spróbować tego dla siebie.
Oto co zrobiłem. Mam plik csv w tym formacie:
host;ip;number;date;status;email;uid;name;lastname;promo_code;
gdzie wszystko po statusie jest opcjonalne i nie będzie nawet odpowiadało; , więc podczas analizowania walidacji należy wykonać, aby sprawdzić, czy wartość jest obecna, tutaj pojawił się problem try / catch.
Obecny kod, który odziedziczyłem w mojej firmie, robi to:
StringTokenizer st=new StringTokenizer(line,";");
String host = st.nextToken();
String ip = st.nextToken();
String number = st.nextToken();
String date = st.nextToken();
String status = st.nextToken();
String email = "";
try{
email = st.nextToken();
}catch(NoSuchElementException e){
email = "";
}
i powtarza to, co zrobiono dla e-maila z uid, imieniem, nazwiskiem i kodem promo.
i zmieniłem wszystko na:
if(st.hasMoreTokens()){
email = st.nextToken();
}
w rzeczywistości działa szybciej. Podczas analizowania pliku, który nie ma opcjonalnych kolumn. Oto średnie czasy:
--- Trying:122 milliseconds
--- Checking:33 milliseconds
jednak oto, co mnie zdezorientowało i powód, dla którego pytam: Gdy uruchamiasz przykład z wartościami dla opcjonalnych kolumn we wszystkich 8000 wierszach CSV, wersja if () nadal działa lepiej niż wersja try / catch, więc moje pytanie jest
Czy naprawdę blok try nie ma żadnego wpływu na wydajność mojego kodu?
Średni czas dla tego przykładu to:
--- Trying:105 milliseconds
--- Checking:43 milliseconds
Czy ktoś może wyjaśnić, co tu się dzieje?
Wielkie dzięki