2011-07-07 35 views
5

Tôi đang tạo một ứng dụng biểu mẫu C# win (VS2010, .NET4) sử dụng bộ hẹn giờ, khoảng thời gian của tôi là 1 giây, tôi theo dõi trình quản lý tác vụ và dường như việc sử dụng bộ nhớ của tôi trước tên ứng dụng trong tab quá trình của trình quản lý tác vụ) tăng theo từng khoảng thời gian! Tôi không làm gì đặc biệt trong sự kiện đếm thời gian, chỉ cần tăng một biến số nguyên và hiển thị nó trong một nhãn.Hẹn giờ tăng mức sử dụng bộ nhớ trong ứng dụng C#

Có bình thường không? Tôi có nên lo lắng về vấn đề bộ nhớ này? Tôi sẽ chạy chương trình này trong máy chủ của tôi (thông qua máy tính từ xa), nó có gây ra bất kỳ vấn đề nào cho máy chủ của tôi không? Nó sẽ hết bộ nhớ? Tôi sử dụng bộ hẹn giờ từ hộp công cụ VS.

+2

Bạn có thể đăng một số mã về cách bạn gọi bộ hẹn giờ và bộ hẹn giờ thực hiện sự kiện 'ElapsedEventHandler' của nó không? – Grambot

+0

Bạn đã thử chạy 'Profiler' và xem đây có thực sự là vấn đề không? –

Trả lời

6

Hãy lấy ví dụ sau đó cập nhật một nhãn mỗi thứ hai với thời gian hiện tại:

var timer = new Timer 
{ 
    Interval = 1000, 
}; 
timer.Tick += (s, evt) => 
{ 
    label1.Text = DateTime.Now.ToLongTimeString(); 
}; 
timer.Start(); 

Nếu bạn có mã như thế này bạn không nên lo lắng về việc sử dụng bộ nhớ. Bộ thu gom rác có thể chạy bất kỳ lúc nào để giải phóng bộ nhớ. Nó chỉ là bạn không thể xác định khi điều này xảy ra.

+0

+1 về nhận xét của Darin. Miễn là bạn không làm bất cứ điều gì để treo vào bộ nhớ lâu dài, bạn sẽ ổn thôi. GC sẽ làm sạch nó nếu cần. Tại mỗi đánh dấu, bạn sẽ tạo một thể hiện chuỗi mới cho văn bản nhãn và sự kiện mới args trong ít nhất. Chúng cần được tái chế khi cần thiết bởi CLR và không đáng lo ngại. –

1

Chỉ cần để gỡ lỗi, hãy thử buộc một thu gom rác thải bằng cách chạy

GC.Collect(); 

sử dụng bộ nhớ của bạn nên quay trở lại xuống tới gần vị trí đó là. Nhân tiện - bạn có thể làm điều này trong trình gỡ rối bằng cách đánh giá biểu thức đó trong đồng hồ nhanh.

Các vấn đề liên quan