プログラムを実行するときにキャッチブロックに入ることに多少のコストがかかることは知っていますが、try {}ブロックを入力しても影響があったのでしょうか? Googleでは多くの意見がありますが、ベンチマークはまったくありません。私が見つけたいくつかの答えは以下の通りであった。JavaのベンチマークTry/Catchブロック
- Java try/catch performance, is it recommended to keep what is inside the try clause to a minimum?
- Try Catch Performance Java
- Java try catch blocks
しかし、彼らは事実を私の質問に答えなかったので、私は自分自身のためにそれをしようとすることを決めました。
ここに私がしたことがあります。私はこのフォーマットでcsvファイルを持っている:
host;ip;number;date;status;email;uid;name;lastname;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、名前、姓とpromo_codeとの電子メールのために行われているものに繰り返す:
私は私の会社に継承された現在のコードは、この行います。
と私はにすべてを変えた:
if(st.hasMoreTokens()){
email = st.nextToken();
}
、実際にそれがより速く実行されます。オプションの列を持たないファイルを解析するとき。ここでは平均的な時間は、次のとおりです。
--- Trying:122 milliseconds
--- Checking:33 milliseconds
は、しかし、ここで私と私が求めている理由を混同ものです:CSVのすべての8000行でオプションの列の値で例を実行している場合は、IF()バージョンは、まだtry/catchバージョンよりも優れているので、私の質問は
本当にtryブロックは自分のコードに影響しませんか?この例の
平均時間は以下のとおりです。
--- Trying:105 milliseconds
--- Checking:43 milliseconds
誰かがここで何が起こっているか説明できますか?
どうもありがとう
条件を毎回チェックすると、プログラムの実行が遅くなります。複数のIF文を持つことはお勧めできません。あなたの会社のアプローチは理解できるようです。エラーが発生したときはいつでも、ブロックをキャッチしてその内容を確認できます。 –
私はこれを二度としません。彼の場合、電子メールはオプションであるため、トークンを持たない 'st'は例外的なケースではありませんが、非常に頻繁に発生する可能性があります。ここで例外を使うのは良いスタイルではありません。 – gexicide
非常に頻繁に起こるだけでなく、デフォルトの動作です。私たちは多くの小さな機会にのみオプションのフィールドを取得します – hectorg87