Trong một ứng dụng với một số lượng nhỏ POJO và rất nhiều phương thức trợ giúp hoạt động trên chúng, điều gì là hiệu quả hơn: để làm cho các lớp trợ giúp đơn hoặc làm cho các phương thức tĩnh?Phương pháp tĩnh hoặc Singletons hiệu suất khôn ngoan (Android)?
Trả lời
phương pháp tĩnh sẽ là hiệu suất rất tốt hơn một chút và bộ nhớ khôn ngoan:
- Tránh (tiềm năng) hất của các cuộc gọi chức năng ảo.
- Loại bỏ bộ nhớ cần thiết cho một phiên bản thực tế của lớp học.
- Loại bỏ sự cần thiết phải có được một thể hiện của lớp khi bạn sử dụng nó.
Nhưng thành thật mà nói, tôi có thể vẫn làm cho nó là singleton
. Những lợi ích bạn nhận được bằng cách không làm điều đó có thể quá nhỏ đến nỗi họ sẽ tạo ra sự khác biệt bằng không, ngay cả trong môi trường di động.
Bạn có thể tránh tình huống và biến chúng thành các lớp học thông thường không?
Bỏ qua câu hỏi về hiệu suất, tôi khuyên bạn nên tránh các singelton và phương pháp tĩnh để cải thiện khả năng kiểm tra của bạn.
Các phương pháp đơn và tĩnh có thể rất khó kiểm tra; Về vấn đề này singletons về cơ bản là phương pháp tĩnh nhưng với một tên khác. Misko Hevery, người làm việc trên Google Test team, có một vài điều tốt về chủ đề này:
Lấy câu hỏi của bạn tại mệnh giá, gọi điện tĩnh có thể sẽ yêu cầu số tiền ít nhất của cpu điện. Lý do là các phương thức thông thường là ràng buộc động và đòi hỏi một số tra cứu tại thời gian chạy trong khi các phương thức tĩnh bị ràng buộc một thời gian biên dịch.
Có nói rằng, nó có thể không quan trọng trong ứng dụng của bạn. Sự khác biệt thực sự là nhỏ. Nếu ứng dụng của bạn làm bất kỳ điều gì với gui, kết xuất xml, kết nối internet hoặc thao tác bên ngoài khác, bạn sẽ thấy rằng các hoạt động này lùn tra cứu toán học đơn giản bằng một yếu tố rất lớn.
Thậm chí nếu bạn không, trong quá trình lược tả bạn có nhiều khả năng gặp phải một nút cổ chai giữ ứng dụng của bạn và khám phá nó không phải là tra cứu phương pháp, nhưng một số logic bạn đã tự của bạn. Ví dụ, bạn đã sử dụng một arraylist thay vì một hashset và phương thức contains có vẻ tốn kém.
Vì vậy, hiệu suất trong những trường hợp này không thực sự quan trọng, tôi khuyên bạn nên sử dụng triển khai thực hiện trên các phương thức tĩnh vì thiết kế hơi linh hoạt hơn. Mặc dù bên ngoài các lựa chọn bạn cung cấp, tôi sẽ bỏ hoàn toàn các lớp trợ giúp và nội tuyến các phương thức trong pojo của bạn.
Đừng lo lắng về việc tối ưu hóa vi mô vô lý như vậy. Lo lắng về khả năng bảo trì. Có vẻ như ứng dụng đó được viết theo kiểu hoàn toàn không phải OO và có thể hưởng lợi rất nhiều từ việc loại bỏ hầu hết các "phương thức trợ giúp" đó và đặt chúng ở nơi chúng thuộc về, với dữ liệu mà chúng hoạt động.
- 1. Postgres Hstore so với Redis - hiệu suất khôn ngoan
- 2. Mà Một là hiệu suất tốt hơn khôn ngoan: setOnClickListener VS android: onclick = "onClick"
- 3. Hiệu suất-khôn ngoan: Rất nhiều PNG nhỏ hoặc một PNG lớn?
- 4. Các phương thức lớp VS Các hàm tĩnh lớp VS Các hàm đơn giản - Hiệu năng-khôn ngoan?
- 5. Hiệu suất khôn ngoan, thư viện ổi tốt đến mức nào?
- 6. Generics Java, singletons và phương thức tĩnh
- 7. SQL Hiệu suất-khôn ngoan, những gì tốt hơn: một NẾU ... ELSE khoản, hoặc mệnh đề WHERE LIKE?
- 8. Truy cập các yếu tố của ma trận hàng khôn ngoan so với cột khôn ngoan
- 9. Python yếu tố khôn ngoan như sum
- 10. 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
- 11. Tính hàng khôn ngoan tỷ lệ
- 12. Element-khôn ngoan cho hai danh sách
- 13. Cách nhanh nhất (hiệu suất khôn ngoan) để biến một chuỗi thành một mảng byte [] trong C#
- 14. Điều gì là tốt hơn? Phương pháp tĩnh HOẶC Phương pháp thể hiện
- 15. Tiết kiệm mảng NumPy để txt hàng tập khôn ngoan
- 16. Phương pháp tĩnh của một lớp tĩnh so với phương pháp tĩnh của một lớp không tĩnh (C#)
- 17. Element-khôn ngoan có nghĩa là trong R
- 18. Hoạt động ma trận hàng khôn ngoan trong R
- 19. Sử dụng phương pháp tĩnh hoặc không có phương pháp tĩnh nào trong lớp học nghề?
- 20. Những cách khôn ngoan để vẽ một ngôi sao Star
- 21. Hệ thống tệp tốt nhất để phân phối tệp 1GB bằng nginx, dưới mức viết vừa phải, đọc hiệu suất khôn ngoan?
- 22. Reshape MATLAB vector theo cách Row-khôn ngoan
- 23. Hoạt động khôn ngoan của hàng trong octave
- 24. Ghép chuỗi yếu tố khôn ngoan ở dạng vón cục
- 25. Có quyết định khôn ngoan để chuyển từ .NET sang Java EE hoặc RoR không?
- 26. Nhà xây dựng tĩnh có thể giảm hiệu năng truy cập các phương pháp tĩnh không?
- 27. 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
- 28. Hiệu suất hoạt động của các phương pháp ảo
- 29. android/PhoneGap hiệu suất
- 30. android: hiệu suất gson
Được rồi, sau đó JDK được viết theo kiểu không phải OO cũng như tất cả của nó là Arrays.sort(), Long.valueOf(), v.v.;) – yanchenko
Có một sự khác biệt lớn giữa việc có một phương pháp tĩnh ở đây và ở đó, và toàn bộ ứng dụng của bạn không có gì ngoài các đối tượng giá trị và tất cả logic trong các phương thức tĩnh (có thể không thực sự như vậy, nhưng đó là cách bạn tạo ra âm thanh) . –
@Michael: nhưng Android thực sự có bộ nhớ thấp. Tôi đang xem xét lời khuyên của bạn tại bài đăng này và một bài đăng tại http://stackoverflow.com/questions/1284718/are-static-methods-good-for-scalability – Emerald214