Chúng tôi đang viết một công cụ chẩn đoán cần chạy trong nhiều giờ cùng một lúc, nhưng chúng tôi đang chạy vào một Ngoại lệ ngoài bộ nhớ bí ẩn khi chúng tôi cố gắng xóa các mục khỏi CheckedListBox sau khi ứng dụng đã chạy trong một vài giờ.Rò rỉ bộ nhớ CheckedListBox
Chúng tôi ban đầu cố gắng sử dụng checkedListBox.Items.Clear();
, và sau khi một số Googling xung quanh, chúng tôi đã thử một cái gì đó như sau thay vì:
for (int i = checkedListBox.Items.Count - 1; i >= 0; i--)
{
checkedListBox.Items.RemoveAt(i);
}
Thật không may, trên không giải quyết vấn đề này. Tôi thấy rằng ý tưởng trên diễn đàn MSDN, nhưng tôi không thể cho cuộc sống của tôi tìm thấy liên kết một lần nữa sáng nay. Tuy nhiên, diễn đàn đó đã nói rằng ai đó đã lược tả đơn đăng ký của họ và tìm thấy rò rỉ bộ nhớ trong số CheckedListBox.Items.Clear()
.
Có ai biết về công việc chức năng xung quanh không?
EDIT: FingerTheCat của câu trả lời có tạm giải quyết vấn đề của chúng tôi, vì vậy tôi sẽ đánh dấu nó như là câu trả lời cho bây giờ. Tuy nhiên, chúng tôi đã bắt đầu lướt qua mã để thử và tìm ra vấn đề thực sự. Thật không may, việc thực hiện hiện tại phần lớn là mã spaghetti, vì vậy nó có thể là một vài ngày trước khi chúng tôi tìm thấy bất cứ điều gì.
Bạn đang thêm loại mục nào vào hộp danh sách đã chọn? Bạn có thể cần phải làm một số dọn dẹp rõ ràng của các đối tượng này ngoài việc loại bỏ chúng khỏi hộp danh sách (như gọi 'Dispose()' trên chúng vv). – MusiGenesis
Bạn có thể giải quyết rò rỉ bộ nhớ bằng vòng lặp? – Damith
Bạn có thể giả định rằng CheckedListBox không * không * bị rò rỉ bộ nhớ. Sử dụng Perfmon.exe để quan sát các bộ đếm hiệu suất .NET và kiểm tra xem các bộ sưu tập rác thông thường có đang diễn ra hay không. Nếu không thì bạn sẽ cần phải đi săn bắn cho các cuộc gọi Dispose() bị thiếu trong ứng dụng của bạn. –