Cách dọn dẹp các tài nguyên không được quản lý trong C # [trùng lặp]

Jan 20 2021

Tôi có lớp học này:

    public class A
    {
//Some logic code here
    }

Câu hỏi của tôi là làm thế nào tôi có thể loại bỏ hoặc phá hủy bất kỳ đối tượng nào được tạo dựa trên lớp này sau khi vượt ra ngoài phạm vi?

Ví dụ:

  A a = new A();
    //some code here

sau khi //some code heretôi muốn ađối tượng bị phá hủy hoặc xử lý và giải phóng bộ nhớ được cấp phát của anh ta.

Trả lời

1 ispiro Jan 20 2021 at 03:55

Tôi sẽ bỏ qua tiêu đề và tập trung vào phần nội dung của câu hỏi vì nó có vẻ hiển nhiên từ câu hỏi vấn đề là gì.

Câu trả lời ngắn gọn: Bạn không. Việc này sẽ được bộ thu gom rác tự động xử lý khi thấy cần thiết. (Bạn không cần phải chạy trình thu gom rác. Điều đó xảy ra tự động.)

Sau đó, bộ thu gom rác sẽ tìm kiếm các thực thể đã vượt ra khỏi phạm vi, như atrong ví dụ của bạn và sẽ giải phóng không gian mà chúng đã sử dụng. Sau đó, nó sẽ thấy rằng nội bộ của acũng đã vượt ra khỏi phạm vi (trừ khi chúng được tham chiếu ở nơi khác trong mã của bạn) và xử lý chúng.

Đã nói rằng, khi bạn sử dụng các biến của các lớp triển khai Dispose, tốt nhất là gọi Disposemột cách rõ ràng hoặc sử dụng usingcác khối để hoàn thành việc đó. Bạn cũng có thể triển khai một trình hoàn thiện sẽ được thực thi khi ađược xử lý. Nhưng có vẻ như đó không phải là những gì bạn đang hỏi.