Tôi đang cố gắng theo dõi rò rỉ bộ nhớ trong một chương trình C# lớn hơn để sinh ra nhiều luồng. Trong quá trình này, tôi đã tạo ra một chương trình nhỏ mà tôi đang sử dụng để kiểm tra một số điều cơ bản và tôi đã tìm thấy một số hành vi mà tôi thực sự không hiểu.Rò rỉ bộ nhớ chủ đề
class Program
{
static void test()
{
}
static void Main(string[] args)
{
while (true)
{
Thread test_thread = new Thread(() => test());
test_thread.Start();
Thread.Sleep(20);
}
}
}
Chạy chương trình này, tôi thấy rằng việc sử dụng bộ nhớ của chương trình tăng đều mà không dừng. Chỉ trong vài phút, mức sử dụng bộ nhớ đạt hơn 100MB và tiếp tục leo. Nếu tôi nhận xét ra dòng test_thread.Start() ;, bộ nhớ được chương trình sử dụng tối đa khoảng một vài megabyte và mức độ ra ngoài. Tôi cũng đã cố gắng buộc thu gom rác ở cuối vòng lặp while bằng cách sử dụng GC.Collect(), nhưng nó dường như không làm gì cả.
Tôi nghĩ rằng chuỗi sẽ bị hủy đăng ký ngay sau khi chức năng kết thúc thực thi cho phép GC quét nó lên, nhưng điều này dường như không xảy ra. Tôi không được hiểu một cái gì đó sâu sắc hơn ở đây, và tôi sẽ đánh giá cao một số trợ giúp với sửa chữa rò rỉ này. Cảm ơn trước!