Người phỏng vấn hỏi tôi về điều này hôm nay ... có câu trả lời không?
Người phỏng vấn hỏi tôi về điều này hôm nay ... có câu trả lời không?
Câu trả lời:
System.GC.Collect()
buộc người thu gom rác phải chạy. Điều này không được khuyến khích nhưng có thể được sử dụng nếu tình huống phát sinh.
Không nên gọi gc một cách rõ ràng, nhưng nếu bạn gọi
GC.Collect();
GC.WaitForPendingFinalizers();
Nó sẽ gọi GC rõ ràng trong toàn bộ mã của bạn, đừng quên gọi GC.WaitForPendingFinalizers();
sau GC.Collect()
.
WaitForPendingFinalizers
không nhất thiết phải cung cấp "hiệu suất tốt hơn": nó chỉ chặn cho đến khi tất cả các đối tượng trong hàng đợi hoàn thiện đã được hoàn thành (các đối tượng có thể được đặt ở đó theo lệnh gọi trước đó của bạn Collect
). Nếu bạn muốn có cơ hội cho những đối tượng đó được thu thập thì bạn cần một cuộc gọi khác Collect
sau khi gọi WaitForPendingFinalizers
.
WaitForPendingFinalizers
?
GC.Collect()
từ MDSN ,
Sử dụng phương pháp này để cố gắng lấy lại tất cả bộ nhớ không thể truy cập.
Tất cả các đối tượng, bất kể chúng đã ở trong bộ nhớ bao lâu, đều được xem xét để thu thập; tuy nhiên, các đối tượng được tham chiếu trong mã được quản lý không được thu thập. Sử dụng phương pháp này để buộc hệ thống cố gắng lấy lại số lượng bộ nhớ khả dụng tối đa.
Tuy nhiên, hãy nhớ rằng Trình thu gom rác có thể không luôn luôn dọn sạch những gì bạn mong đợi ...
Bạn không muốn buộc người thu gom rác chạy.
Tuy nhiên, nếu bạn đã từng làm (như một bài tập hoàn toàn học tập, tất nhiên):
GC.Collect()
Tôi nghĩ rằng .Net Framework thực hiện việc này một cách tự động nhưng chỉ trong trường hợp. Trước tiên, hãy đảm bảo chọn những gì bạn muốn xóa, sau đó gọi trình thu gom rác:
randomClass object1 = new randomClass
...
...
// Give a null value to the code you want to delete
object1 = null;
// Then call the garbage collector to erase what you gave the null value
GC.Collect();
Tôi nghĩ đó là nó .. Hy vọng tôi sẽ giúp được ai đó.