Mặc dù tôi hiểu những tác động nghiêm trọng của việc chơi với chức năng này (hoặc ít nhất đó là những gì tôi nghĩ), tôi không hiểu tại sao nó lại trở thành một trong những thứ mà các lập trình viên đáng kính sẽ không bao giờ sử dụng, ngay cả những người thậm chí không biết nó dùng để làm gì.
Giả sử tôi đang phát triển một ứng dụng mà việc sử dụng bộ nhớ rất khác nhau tùy thuộc vào những gì người dùng đang làm. Vòng đời ứng dụng có thể được chia thành hai giai đoạn chính: chỉnh sửa và xử lý thời gian thực. Trong giai đoạn chỉnh sửa, giả sử rằng hàng tỷ hoặc thậm chí hàng nghìn tỷ đối tượng được tạo ra; một số trong số chúng nhỏ và một số trong số chúng không, một số có thể có chất hoàn thiện và một số có thể không, và giả sử thời gian tồn tại của chúng thay đổi từ vài mili giây đến nhiều giờ. Tiếp theo, người dùng quyết định chuyển sang giai đoạn thời gian thực. Tại thời điểm này, giả sử rằng hiệu suất đóng một vai trò cơ bản và sự thay đổi nhỏ nhất trong quy trình của chương trình có thể mang lại hậu quả thảm khốc. Việc tạo đối tượng sau đó được giảm xuống mức tối thiểu có thể bằng cách sử dụng các nhóm đối tượng và những thứ đó nhưng sau đó, GC kêu bất ngờ và ném tất cả đi, và ai đó chết.
Câu hỏi: Trong trường hợp này, sẽ không khôn ngoan nếu gọi GC.Collect () trước khi bước vào giai đoạn thứ hai?
Rốt cuộc, hai giai đoạn này không bao giờ trùng lặp về thời gian với nhau và tất cả các thống kê và tối ưu hóa mà GC có thể thu thập được sẽ rất ít được sử dụng ở đây ...
Lưu ý: Như một số bạn đã chỉ ra, .NET có thể không phải là nền tảng tốt nhất cho một ứng dụng như thế này, nhưng điều đó nằm ngoài phạm vi của câu hỏi này. Mục đích là để làm rõ liệu một lệnh gọi GC.Collect () có thể cải thiện hành vi / hiệu suất tổng thể của ứng dụng hay không. Tất cả chúng tôi đều đồng ý rằng những trường hợp mà bạn sẽ làm điều như vậy là cực kỳ hiếm nhưng sau đó, GC cố gắng đoán và thực hiện nó hoàn toàn tốt trong hầu hết thời gian, nhưng nó vẫn chỉ là phỏng đoán.
Cảm ơn.