Để thích ứng với thử nghiệm đơn vị và chế nhạo, nó trở thành một thực tế phổ biến để khai báo các phương thức và thuộc tính là ảo. Có tác động hiệu quả nào khi tuyên bố điều gì đó ảo như được cho là phi ảo không?Hiệu suất hoạt động của các phương pháp ảo
Trả lời
Nói chung, sự khác biệt là các phương pháp ảo được gọi bằng cách sử dụng một mã số Callvirt, trong khi đó các phương thức ảo không sử dụng mã gọi Opcode chuẩn. Gọi Opcodes chắc chắn nhanh hơn Callvirt, nhưng tôi chưa bao giờ tìm thấy nó gần như đủ lớn để biện minh cho việc đưa ra quyết định thiết kế dựa trên điều này.
Premature optimization is the root of all evil.
IIRC, trình biên dịch C# sẽ sử dụng CallVirt cho tất cả các phương pháp dụ, bất kể chúng là ảo. Bằng cách đó CLR thực hiện kiểm tra vô hiệu. –
@JohnSkeet Vậy điều đó có nghĩa là vào cuối ngày thực sự không có sự khác biệt? – TGH
Điểm tốt John - bạn đúng với ngoại lệ của các phương thức thể hiện kiểu giá trị mà tôi nghĩ - mà trình biên dịch phát ra một Opcodes.Call. – Jeff
Không, không thực sự.
Đây không phải là điều bạn sẽ chú ý.
Tôi không biết chi tiết cụ thể, nhưng tôi biết rằng bạn không cần phải lo lắng về nó với giá 99% các ứng dụng ra khỏi đó.
btw - Nếu chọn giao diện Mock thay vì lớp, bạn sẽ không cần phương thức ảo.
Chúc may mắn, Tom
Bạn có cùng một 'hình phạt' với giao diện như một phương thức ảo. – leppie
- 1. Tác động hiệu suất của thừa kế ảo
- 2. tĩnh/biến dụ hiệu suất hoạt động của Java
- 3. Java - Phương pháp ảo
- 4. Boost.Variant Vs Hiệu suất Giao diện Ảo
- 5. Phương pháp tĩnh hoặc Singletons hiệu suất khôn ngoan (Android)?
- 6. Hiệu suất của hoạt động hàng và cột trong NumPy
- 7. C++ phương pháp ảo trọng
- 8. Các phương pháp không ảo trong Java
- 9. Phương pháp mở rộng ảo?
- 10. Phương pháp hiệu quả để tính toán xác suất của một tập hợp các kết quả?
- 11. AdMob - hiệu suất tốt hơn trong hoạt động android
- 12. Hiệu suất tác động của DefaultTraceListener
- 13. Hiệu suất của việc sử dụng các phương pháp tĩnh vs instantiating lớp có chứa các phương thức
- 14. Hiệu suất của dynamic_cast?
- 15. các phương pháp ảo và các lớp mẫu
- 16. phương pháp phi ảo Overriding
- 17. Hiệu suất của Bộ đếm hiệu suất
- 18. Phương pháp mở rộng hiệu suất so với Phương pháp thể hiện
- 19. Cải thiện hiệu suất của các hình động trong ba.js
- 20. PostgreSQL: hiệu suất tác động của các cột phụ
- 21. Hiệu suất của các hoạt động số nguyên và bitwise trên GPU
- 22. Hiệu suất hoạt động của việc sử dụng các câu lệnh in trong tập lệnh Python
- 23. Phương thức ảo hoạt động như thế nào trong C#?
- 24. hiệu suất của phương pháp tĩnh và không tĩnh cho một lớp tiện ích
- 25. hiệu suất hoạt động ẩn danh trong PHP
- 26. Hiệu suất của jQuery Parallax/Scroll Hiệu suất
- 27. CSS3 - Các phương pháp hay nhất về hiệu suất là gì?
- 28. Các hoạt động trên nền Android Live cho hiệu suất và tiết kiệm pin?
- 29. Hiệu suất của Java ResourceBundle
- 30. Hoạt động Scala với hiệu suất mảng (plugin scalacl)
Bạn nghĩ rằng _design cho testability_ chỉ làm mọi thứ 'virtual' và tất cả các lớp' mở'? Hmm ... –
@StefanHanke: Tôi không thấy bất cứ điều gì cho thấy OP cho rằng đó là * chỉ * đó. –
Vâng tôi không nghĩ rằng nó nên được thực hiện khi nó không cần thiết ... Nó chỉ là một biện pháp có thể cải thiện khả năng kiểm tra khi thích hợp – TGH