Я знаю, что вход в блок catch имеет некоторые значительные затраты при выполнении программы, однако мне было интересно, если вход в блок try{} также оказало какое-либо влияние, поэтому я начал искать ответ в Google со многими мнениями, но без бенчмаркинга. Вот некоторые ответы, которые я нашел:
Однако они не ответили на мой вопрос фактами, поэтому я решил попробовать сам.
Вот что я сделал.У меня есть файл csv в следующем формате:
host;ip;номер;дата;статус;email;uid;имя;фамилия;promo_code;
где все, что следует за статусом, является необязательным и даже не будет иметь соответствующего ; , поэтому при синтаксическом анализе необходимо выполнить проверку, чтобы увидеть, есть ли значение, вот где мне пришла в голову проблема try/catch.
Текущий код, который я унаследовал в своей компании, делает следующее:
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 = "";
}
и он повторяет то, что делается для электронной почты с uid, именем, фамилией и промо_кодом.
и я изменил все на:
if(st.hasMoreTokens()){
email = st.nextToken();
}
и на самом деле он работает быстрее. При синтаксическом анализе файла, в котором нет необязательных столбцов. Вот среднее время:
--- Trying:122 milliseconds
--- Checking:33 milliseconds
, однако вот что меня смутило и почему я спрашиваю: при запуске примера со значениями для необязательных столбцов во всех 8000 строках CSV версия if() по-прежнему работает лучше, чем версия try/catch, поэтому мой вопрос:
Действительно ли блок try не влияет на производительность моего кода?
Среднее время для этого примера:
--- Trying:105 milliseconds
--- Checking:43 milliseconds
Кто-нибудь может объяснить, что здесь происходит?
Большое спасибо