Tại sao mọi người nghĩ rằng rò rỉ bộ nhớ trong .NET không giống với bất kỳ rò rỉ nào khác?
Rò rỉ bộ nhớ là khi bạn gắn vào tài nguyên và không để nó đi. Bạn có thể làm điều này cả trong mã hóa được quản lý và không được quản lý.
Về .NET và các công cụ lập trình khác, đã có ý tưởng về thu gom rác và các cách khác để giảm thiểu các tình huống sẽ khiến ứng dụng của bạn bị rò rỉ. Nhưng phương pháp tốt nhất để ngăn chặn rò rỉ bộ nhớ là bạn cần hiểu mô hình bộ nhớ cơ bản của mình và cách mọi thứ hoạt động, trên nền tảng bạn đang sử dụng.
Tin rằng GC và phép thuật khác sẽ dọn sạch mớ hỗn độn của bạn là con đường ngắn để rò rỉ bộ nhớ, và sẽ khó tìm thấy sau này.
Khi mã hóa không được quản lý, bạn thường đảm bảo dọn dẹp, bạn biết rằng các tài nguyên bạn nắm giữ, sẽ là trách nhiệm của bạn để dọn sạch, không phải của người gác cổng.
Mặt khác, trong .NET, rất nhiều người nghĩ rằng GC sẽ dọn sạch mọi thứ. Vâng, nó làm một số cho bạn, nhưng bạn cần chắc chắn rằng nó là như vậy. .NET có rất nhiều thứ, vì vậy bạn không phải lúc nào cũng biết mình đang xử lý tài nguyên được quản lý hay không được quản lý và bạn cần đảm bảo những gì bạn đang xử lý. Xử lý phông chữ, tài nguyên GDI, thư mục hoạt động, cơ sở dữ liệu, vv thường là những thứ bạn cần chú ý.
Theo thuật ngữ được quản lý, tôi sẽ đặt cổ lên dây chuyền để nói rằng nó sẽ biến mất một khi quá trình bị giết / loại bỏ.
Tôi thấy rất nhiều người có điều này mặc dù, và tôi thực sự hy vọng điều này sẽ kết thúc. Bạn không thể yêu cầu người dùng chấm dứt ứng dụng của bạn để dọn dẹp mớ hỗn độn của bạn! Hãy xem một trình duyệt, có thể là IE, FF, v.v., sau đó mở, giả sử, Google Reader, để nó ở lại trong một vài ngày và xem xét những gì sẽ xảy ra.
Nếu sau đó bạn mở một tab khác trong trình duyệt, lướt đến một trang web nào đó, sau đó đóng tab lưu trữ trang khác khiến trình duyệt bị rò rỉ, bạn có nghĩ trình duyệt sẽ giải phóng bộ nhớ không? Không như vậy với IE. Trên máy tính của tôi, IE sẽ dễ dàng ăn 1 GiB bộ nhớ trong một khoảng thời gian ngắn (khoảng 3-4 ngày) nếu tôi sử dụng Google Reader. Một số tờ báo thậm chí còn tồi tệ hơn.