Về mặt lịch sử, các ngôn ngữ như C++, ngoại lệ đã rất chậm so với khác các hình thức kiểm soát dòng chảy bằng cùng một ngôn ngữ.
Trong C++, có hai điều tại nơi làm việc:
- Ném một ngoại lệ là rất phức tạp. Ngăn xếp cần phải được mở và làm như vậy trong mã gốc là nhiều hơn khó hơn trong ngôn ngữ dựa trên máy ảo cấp cao.
- Điều khiển luồng thông thường, trực tiếp cực kỳ nhanh. Đó là mã gốc; một nhánh là một vài hướng dẫn, trong đó một trường hợp ngoại lệ lăn ngược lại ngăn xếp sẽ gọi một thuật toán phức tạp (tìm kiếm dữ liệu ngăn xếp trong một bảng lớn, có thể nén, vv).
Sự chênh lệch về hiệu suất này dẫn đến sự khôn ngoan chung về ngoại lệ: chỉ làm điều đó cho những điều bất thường, vì vậy nó chỉ được sử dụng ở những nơi có lợi nhất và không bị ảnh hưởng.
Điều này không áp dụng cho các ngôn ngữ cấp cao. Đây cũng là vì hai lý do:
- Quay trở lại ngăn xếp đơn giản hơn rất nhiều.Ngăn xếp rất dễ kiểm tra; bạn không cần các bảng ma thuật để biết cách cuộn lùi ngăn xếp và đối tượng nào được xây dựng tại bất kỳ thời điểm nào.
- Luồng chương trình thông thường vốn chậm hơn. Trong một ngôn ngữ dựa trên máy ảo, mọi thứ đơn giản chỉ mất nhiều công sức hơn để bắt đầu.
Ngoại lệ vẫn không miễn phí, nhưng sự chênh lệch không còn là điều đáng lo ngại nữa. Điều này có nghĩa là sự khôn ngoan chung được hình thành trong C++ được áp dụng sai ở đây. Các ngoại lệ thường được sử dụng trong luồng chương trình thông thường.
Thực tế, chúng được xây dựng thành ngôn ngữ, trong các cấu trúc bạn sử dụng mọi lúc. Mỗi lần bạn sử dụng trình lặp - mỗi for x in xrange(1000)
, ngoại lệ StopIteration
được sử dụng để kết thúc vòng lặp.
Chọn ngoại lệ hoặc kiểm soát luồng tuyến tính bằng Python dựa trên ý nghĩa hơn. Không chọn dựa trên hiệu suất, trừ khi bạn đang thực sự ở vòng lặp bên trong nơi hiệu suất quan trọng; trong trường hợp đó, như mọi khi, hồ sơ và tìm hiểu xem nó có thực sự quan trọng không.
(Tôi không thể nói cho PHP.)
Nguồn
2011-01-17 22:00:54
C++ tương tự như PHP liên quan đến ngoại lệ (ít nhất là cho các ứng dụng dành cho máy tính để bàn - được nhúng có thể khác) - ném ngoại lệ ** thực sự ** làm tổn thương hiệu suất của bạn. – Zooba
Hiệu năng của C# cũng bị suy giảm nghiêm trọng khi các ngoại lệ được ném ra. –
Chỉ cần nhận ra tôi đã gõ "ngoại lệ từ tiêu chuẩn." Xin đừng coi đó là một trò chơi xấu X-P – keithjgrant