Tôi có nên gọi trình thu gom rác trong khi tải màn hình không?


9

VÌ VẬY, tôi đã đọc một chút về Bộ sưu tập rác gần đây, vì tò mò và có một điều được lặp đi lặp lại khá thường xuyên: việc thu gom rác có thể dẫn đến chương trình bị chậm đột ngột, tùy thuộc vào "độ sâu" của bộ sưu tập.

Nhưng trong các trò chơi video, có một khoảnh khắc mà người dùng thực sự không thể nhận thấy một độ trễ nhỏ: tải màn hình. Vì vậy, tôi nghĩ rằng, có thể hữu ích khi tiến hành thu gom rác đầy đủ trong giai đoạn tải (thông qua Thu thập ()), phải đợi một hoặc hai giây nữa sẽ không thực sự ảnh hưởng đến người dùng.

Câu hỏi của tôi là, nó thực sự hữu ích, hoặc không có lợi ích thực sự để làm điều này?


Là một phần của quy trình gỡ lỗi cho trò chơi của tôi, tôi đã cung cấp cho người dùng một tùy chọn để gọi Trình thu gom rác bất cứ lúc nào. Tùy thuộc vào cách điều này diễn ra, nó cũng có thể tồn tại trong bản dựng cuối cùng của trò chơi. Tôi sẽ đề nghị gọi nó trong khi tải màn hình và nói chung bất cứ lúc nào khi nó không làm gián đoạn trực quan người dùng. Nếu trò chơi của bạn có hoạt hình chết chóc xuất hiện trên màn hình đen, đây cũng là một cơ hội hoàn hảo để gọi người thu gom rác.
Krythic

Câu trả lời:


13

Có, gọi nó là điều cuối cùng bạn làm khi tải.

Điều này sẽ tối đa hóa thời gian giữa mức bắt đầu và độ trễ đầu tiên do một GC.

Mặc dù vậy, bạn cũng nên cố gắng giảm thiểu phân bổ nói chung để không bị chậm trễ nữa trong một cấp độ.

Xem hiệu suất kém trên 360 và WP7Twin Paths to Garbage Collector Nirvana


1
Ngoài ra, đó là khoảng thời gian DUY NHẤT bạn nên gọi nó - đặc biệt là trên các khung nhỏ gọn (XBox, WinPhone).
Jonathan Dickinson

1
@JonathanDickinson: Hoàn toàn đúng. Nó chỉ thực sự được gọi là nơi người dùng mong đợi tạm dừng (tải thông thường, có thể cũng tiết kiệm) và chắc chắn không phải là một phần của sự kiện lặp / thường xuyên.
George Duckett
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.