2009-01-02 34 views

Trả lời

6

Đối với cả hai khả năng đọc và cảm giác sử dụng một bộ chuyển mạch câu lệnh thay vì tải các câu lệnh IF.

Các câu lệnh switch là hơi nhanh hơn mặc dù:

http://www.blackwasp.co.uk/SpeedTestIfElseSwitch.aspx (lần đầu tiên nhấn trên Google)

Trình biên dịch có thể tối ưu hóa câu lệnh switch để sử dụng nếu bạn có nhiều hơn, tôi sẽ nói, 3 hoặc 4 các trường hợp khác nhau

0

Nếu bạn đang sử dụng int/string/etc, thì switch có một số tùy chọn nhảy phức tạp hơn có thể làm cho switch hiệu quả hơn nếu bạn có nhiều điều kiện. Tuy nhiên, sự khác biệt không có khả năng là rất lớn, và switch không phải là một tùy chọn cho tất cả các loại (chỉ dựa trên số nguyên và chuỗi).

0

Tôi đã đọc các câu lệnh chuyển đổi đó có thể nhanh hơn một chút.

3

Bạn đang bật tính năng nào? Nếu bạn đang chuyển đổi trên một chuỗi, trình biên dịch C# hoặc sẽ chuyển đổi nó thành từ điển hoặc thành một loạt các kiểm tra nếu/else. Mà sẽ nhanh hơn phụ thuộc vào các chuỗi trong câu hỏi (bao gồm cả chuỗi ứng cử viên).

Nếu bạn đang chuyển đổi trên giá trị tích phân, tôi tin trình biên dịch C# luôn sử dụng câu lệnh chuyển đổi IL - nhưng có thể hoặc không nhanh hơn trình tự if/else tùy thuộc vào các giá trị liên quan. (Nếu họ đang ở trong một khối tiếp giáp lớn, CLR chỉ có thể nhảy đến đúng nơi trong bảng - nếu chúng rất khác nhau, tôi nghi ngờ nó không giúp được.)

Đây có phải là một truy vấn không hoạt động không , hoặc bạn thực sự vi tối ưu hóa ở cấp độ này? Bất kỳ sự khác biệt nào về hiệu suất sẽ không đáng kể trong phần lớn các trường hợp - viết để dễ đọc.

0

Khi giải quyết các mối quan tâm về hiệu suất, bạn phải đo sự khác biệt bằng cách sử dụng dữ liệu thực tế. Thực tế là bạn đang yêu cầu từ quan điểm đầu cơ cho thấy bạn không có vấn đề về hiệu suất thực tế để giải quyết và do đó bạn nên lo lắng về việc có thể đọc được/duy trì được

0

Tricky, bạn sẽ phải chạy thử nghiệm bởi vì nếu và chuyển đổi kết quả trong mã IL khác nhau.

Người ta hy vọng chúng giống hệt nhau.