プログラムを実行するときにcatchブロックに入るとかなりのコストがかかることは知っていますが、try {}ブロックに入るのも影響があるのではないかと思ったので、Googleで多くの意見を持って答えを探し始めましたが、ベンチマークはありませんでした。すべて。私が見つけたいくつかの答えは次のとおりです。
- Javaのtry/catchパフォーマンス、try句内の内容を最小限に抑えることをお勧めしますか?
- CatchPerformanceJavaをお試しください
- Javaはブロックをキャッチしようとします
しかし、彼らは私の質問に事実で答えなかったので、私はそれを自分で試してみることにしました。
これが私がしたことです。この形式の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、name、lastname、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
誰かがここで何が起こっているのか説明できますか?
どうもありがとう