Tôi có một đối tượng, mà tôi tin rằng chỉ được tổ chức bởi một WeakReference. Tôi đã theo dõi các tài liệu tham khảo của nó bằng cách sử dụng SOS và SOSEX, và cả hai xác nhận rằng đây là trường hợp (Tôi không phải là một chuyên gia SOS, vì vậy tôi có thể sai về điểm này).Làm cách nào để Garbage Collector quyết định khi nào nên giết các đối tượng do WeakReferences tổ chức?
Giải thích chuẩn của WeakReferences là GC bỏ qua chúng khi thực hiện quét. Tuy nhiên, đối tượng của tôi tồn tại một lời gọi đến GC.Collect (GC.MaxGeneration, GCCollectionMode.Forced).
Có thể cho một đối tượng chỉ được tham chiếu với một WeakReference để tồn tại bộ sưu tập đó không? Có một bộ sưu tập kỹ lưỡng hơn mà tôi có thể ép buộc không? Hoặc, tôi có nên thăm lại niềm tin của mình rằng chỉ những tham chiếu đến đối tượng là yếu?
Update và Kết luận
Các nguyên nhân gốc rễ là có một tài liệu tham khảo trên stack đã được khóa đối tượng. Đó là chưa rõ tại sao SOS và SOSEX cũng không cho thấy tham chiếu đó. Lỗi người dùng luôn là một khả năng.
Trong quá trình chẩn đoán nguyên nhân gốc rễ, tôi đã thực hiện một số thí nghiệm đã chứng minh rằng WeakReferences cho các đối tượng thế hệ thứ 2 có thể dính quanh một thời gian dài đáng ngạc nhiên. Tuy nhiên, đối tượng gen WRd thứ 2 sẽ không tồn tại GC.Collect (GC.MaxGeneration, GCCollectionMode.Forced).
Đối tượng _aren't_ được tổ chức bởi WeakReferences. Đó chính là điểm của họ. Có thể có thứ gì đó khác đang giữ họ sống. – zneak
Điều gì xảy ra khi bạn gọi GC.GetGeneration (yourWeakReference)?Liệu nó trả lại một cái gì đó hoặc ném một ngoại lệ? – MusiGenesis
Điều gì xảy ra! Gchandles và! Gcroot hiển thị? –