Tôi có một đối tượng tồn tại mãi mãi. Tôi đang xóa tất cả các tham chiếu mà tôi có thể thấy, sau khi sử dụng nó, nhưng nó vẫn chưa được thu thập. Vòng đời của nó khá tinh vi nên tôi không thể chắc chắn rằng tất cả các tham chiếu đã bị xóa.Tìm tham chiếu đến đối tượng trong thời gian chạy
if (container.Controls.Count > 0)
{
var controls = new Control[ container.Controls.Count ];
container.Controls.CopyTo(controls, 0);
foreach (var control in controls)
{
container.Controls.Remove(control);
control.Dispose();
}
controls = null;
}
GC.Collect();
GC.Collect(1);
GC.Collect(2);
GC.Collect(3);
Tôi làm cách nào để tìm hiểu tham chiếu nào? Tại sao nó không được thu thập?
Hiển thị mã cho chúng tôi và chúng tôi có thể trợ giúp. Lưu ý rằng việc thu gom rác thải không nhất thiết xảy ra ngay lập tức. – Lazarus
Và tôi đoán câu hỏi thực sự là, tại sao bạn lo lắng về nó? Nếu bạn đang sử dụng tài nguyên dùng một lần, vứt bỏ chúng khi bạn không sử dụng chúng nữa, hãy dọn sạch tài nguyên hệ thống không được quản lý và xem ra bằng chuỗi ký tự. –
Mã này là: if (container.Controls.Count> 0) { \t \t \t \t var điều khiển = new kiểm soát [container.Controls.Count]; \t \t \t \t container.Controls.CopyTo (điều khiển, 0); \t \t \t \t foreach (var kiểm soát trong điều khiển) { \t \t \t \t \t container.Controls.Remove (đối chứng); \t \t \t \t \t control.Dispose(); \t \t \t \t \t \t \t \t \t} \t \t \t \t điều khiển = null; \t \t \t} GC.Collect(); GC.Collect (1); GC.Collect (2); GC.Collect (3); Nhưng nó vẫn còn trong bộ nhớ. Vì vậy, nó meens, rằng nó thép có nguồn gốc. Làm thế nào tôi có thể tìm thấy nguồn gốc này? –