Tôi biết rằng việc đi vào khối catch có một số chi phí quan trọng khi thực hiện một chương trình, tuy nhiên, tôi đã tự hỏi nếu nhập một khối try {} cũng có bất kỳ tác động nào nên tôi bắt đầu tìm kiếm câu trả lời trong google với nhiều ý kiến, nhưng không có điểm chuẩn nào cả. Một số câu trả lời tôi nhận thấy là:Điểm chuẩn của Java Try/Catch Block
- 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
Tuy nhiên họ đã không trả lời câu hỏi của tôi với những sự kiện, vì vậy tôi quyết định thử nó cho bản thân mình.
Đây là những gì tôi đã làm. Tôi có một tập tin csv với định dạng này:
host;ip;number;date;status;email;uid;name;lastname;promo_code;
nơi tất cả mọi thứ sau khi tình trạng là không bắt buộc và thậm chí sẽ không có tương ứng; , do đó, khi phân tích cú pháp xác thực phải được thực hiện để xem liệu giá trị có ở đó không, đây là nơi vấn đề try/catch xuất hiện trong tâm trí của tôi.
Mã hiện tại mà tôi được thừa hưởng trong công ty của tôi thực hiện điều này:
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 = "";
}
và nó lặp đi lặp lại những gì nó được thực hiện cho email với uid, tên, lastname và promo_code.
và tôi đã thay đổi tất cả mọi thứ để:
if(st.hasMoreTokens()){
email = st.nextToken();
}
và trong thực tế nó thực hiện nhanh hơn. Khi phân tích cú pháp tệp không có cột tùy chọn. Dưới đây là thời gian trung bình:
--- Trying:122 milliseconds
--- Checking:33 milliseconds
tuy nhiên
, đây là những gì nhầm lẫn tôi và lý do tôi đang hỏi: Khi chạy ví dụ với các giá trị cho các cột tùy chọn trong tất cả 8000 dòng CSV, phiên bản if() vẫn hoạt động tốt hơn phiên bản thử/nắm bắt, do đó, câu hỏi của tôi là
Khối thử thực sự không có bất kỳ tác động hiệu suất nào trên mã của tôi không?
Thời gian trung bình cho ví dụ này là:
--- Trying:105 milliseconds
--- Checking:43 milliseconds
ai đó có thể giải thích những gì đang xảy ra ở đây?
Cảm ơn rất nhiều
mọi lúc kiểm tra điều kiện làm cho chương trình chạy chậm hơn. Nó không phải là một ý tưởng tốt để có nhiều câu lệnh IF. Cách tiếp cận công ty của bạn có vẻ dễ hiểu. Bất cứ khi nào bất kỳ lỗi nào được nâng lên, bạn có thể có khối catch để xem nó là gì. –
Tôi sẽ không làm điều này. Trong trường hợp của mình, email là tùy chọn, do đó, 'st' không có nhiều mã thông báo hơn không phải là trường hợp ngoại lệ, nhưng có thể xảy ra rất thường xuyên. Sử dụng một ngoại lệ ở đây là không có phong cách tốt. – gexicide
Không chỉ xảy ra thường xuyên, là hành vi mặc định. Chúng tôi sẽ chỉ nhận được các trường tùy chọn trong nhiều trường hợp nhỏ – hectorg87