Sử dụng Bộ sưu tập trong Phát triển trò chơi Android không được khuyến khích?


10

Trong khi làm việc với một dự án trò chơi cho Android, tôi đã tìm hiểu một số thông tin về tối ưu hóa hiệu suất cho mã trò chơi. Và tôi đã biết rằng việc sử dụng các Bộ sưu tập Java như List, Arraylist, v.v. không được khuyến khích trong các mã trò chơi, mặc dù bộ sưu tập là một công cụ hữu ích trong lập trình Java. Tại sao nó lại như vậy? Tôi muốn biết chi tiết kỹ thuật như khung Collection có thể tác động đến các hệ thống Android đến mức nào và tại sao? Bất kỳ trợ giúp về vấn đề này sẽ là tuyệt vời.


bạn đọc những thứ đó ở đâu?
egarcia

có lẽ ở đây: developer.android.com/guide/practices/design/performance.html Lưu ý cách nói: Để tóm tắt: sử dụng vòng lặp nâng cao cho mặc định, nhưng hãy xem xét một vòng lặp được viết bằng tay cho phép lặp ArrayList quan trọng về hiệu năng.
Thợ làm móng

Câu trả lời:


8

Chủ yếu là về phân bổ bộ nhớ và thu gom rác. Phân bổ bộ nhớ trong thời gian chạy cho phép người thu gom rác của bạn có cơ hội mang ra thùng rác. Mà làm tổn thương hiệu suất của bạn. GC nên xảy ra càng hiếm khi càng tốt.

Hầu hết các bộ sưu tập java:

A) Phân bổ nhiều bộ nhớ hơn họ cần.

B) Phân bổ bộ nhớ khi bạn không muốn chúng.

C) Phân bổ bộ nhớ cho mỗi lần lặp khi lặp qua bộ sưu tập.

Để phá vỡ những điều này:

A) Phân bổ các bộ sưu tập với kích thước cố định. I E. tạo nhóm đối tượng.

B) Phân bổ các nhóm này tại chương trình init.

C) Tránh phương thức for (Object obj: Collection) cho các loại bộ sưu tập có phương thức size () và .get (int index).


2
Tất cả các điểm hợp lệ, nhưng hãy ghi nhớ: "Chúng ta nên quên đi những hiệu quả nhỏ, nói khoảng 97% thời gian: tối ưu hóa sớm là gốc rễ của mọi tội lỗi". Bạn nên hạn chế tối ưu hóa như vậy đến những điểm thực sự cần thiết. Ở tất cả những nơi khác, xung đột cho một thiết kế rõ ràng và đơn giản.
Michael Klement

@Michael: Trên các hệ thống ngày nay, với bộ nhớ nhanh và bộ nhớ chậm và nhiều lõi, phân bổ bộ nhớ là điều đắt nhất bạn có thể làm.

2
@Michael: Bạn sẽ khó có thể tìm thấy bất kỳ công cụ trò chơi thương mại hiệu suất cao nào không hoạt động nhiều nhất có thể để tối ưu hóa các mẫu phân bổ bộ nhớ của họ. Đây là một cuộc nói chuyện dài về chủ đề của trò chơi Android thời gian thực. Nó hơi cũ, nhưng hầu hết vẫn nên áp dụng: youtube.com/watch?v=U4Bk5rmIpic
Nailer

Chắc chắn, đừng hiểu sai ý tôi: Tôi không muốn không đồng ý với câu trả lời của bạn. Tôi chỉ muốn chỉ ra rằng bạn nên tối ưu hóa một cách thận trọng và đúng chỗ. Không có lợi ích trong việc sử dụng Mảng trên Bộ sưu tập tại một điểm có ảnh hưởng tối thiểu đến hiệu suất (giả sử 1%). (Cũng được thảo luận chi tiết hơn tại đây: developer.android.com/guide/practices/design/
mẹo

3
@AttackingHobo: Tôi không đồng ý. Tối ưu hóa một cách mù quáng không phải là lành mạnh, đó là những gì câu nói của bạn nghe giống tôi (sửa tôi nếu tôi hiểu sai). Chris Pruett cũng tuyên bố trong Google IO Video được liên kết ở trên: "Chọn tính linh hoạt theo tốc độ mỗi ngày trong tuần ... cho đến khi trò chơi bị hỏng." và tôi đồng ý với điều này.
Michael Klement
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.