Tôi đã có ý tưởng này trong khi suy nghĩ về cách tái chế các đối tượng. Tôi đang làm điều này như là một thử nghiệm để xem làm thế nào bộ nhớ tổng hợp hoạt động và tôi nhận ra rằng trong 99% kịch bản này là rất không cần thiết.Giữ đối tượng trên nỗ lực phá hủy GC
Tuy nhiên, tôi có một câu hỏi. Có cách nào để buộc GC giữ đối tượng không? Nói cách khác, tôi có thể yêu cầu GC không phá hủy một đối tượng và nói thay vào đó có tham chiếu mới được tạo trong danh sách có sẵn để sử dụng các đối tượng không? Vấn đề này, mặc dù tôi đã không kiểm tra này, là nếu tôi thêm một cái gì đó như thế này vào một danh sách:
~myObject()
{
((List<myObject>)HttpContext.Current.Items[typeof(T).ToString()]).add(this);//Lets assume this is ASP
}
nó sẽ thêm một con trỏ đến đối tượng này vào danh sách, nhưng nếu đối tượng bị phá hủy tôi sẽ nhận được một ngoại lệ con trỏ null vì đối tượng không còn ở đó nữa. Tuy nhiên, có lẽ tôi có thể nói cho GC không thu thập vật phẩm này và do đó giữ vật thể?
Tôi biết đây là loại nội dung mà hầu hết các lập trình viên sẽ đi "tại sao bạn lại làm điều này?". Nhưng mặt khác, lập trình là về việc thử mới và học những điều mới. Bất kỳ đề xuất, suy nghĩ, triển khai? Mọi sự trợ giúp sẽ rất được trân trọng!
SuppressFinalize chỉ hủy bỏ chạy trình hủy, chứ không phải bộ sưu tập. KeepAlive tốt hơn nhưng bạn phải gọi nó ở đâu đó, không thực tế. –