2012-06-22 79 views
6

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ì.

+0

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

+0

Bạn có thể giải quyết rò rỉ bộ nhớ bằng vòng lặp? – Damith

+3

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. –

Trả lời

0

Khi nó quay ra, ai đó đã để lại một đoạn mã gỡ lỗi trong ứng dụng đã thêm thông tin nhật ký khá chi tiết vào một ArrayList mà không bao giờ xóa nó. Mã đó cũng đã tự thêm các bản sao của số ArrayList. Chắc chắn không phải là một điều tốt để quên mang đi.

-2

Điều tốt nhất để làm, tôi nghĩ, là gọi GarbageCollector tại một số điểm trong mã của bạn. Chỉ cần thêm GC.Collect(); gần một số vòng và nó sẽ khắc phục vấn đề bộ nhớ của bạn.

+2

Điều này là chắc chắn nhất không phải là sửa chữa chính xác. GC.Collect() có thể vẫn hữu ích trong khi chẩn đoán vấn đề thực sự. – Henrik

+1

Gọi 'GC.Collect()' là * không * giải pháp. –