Có thể thiết lập kích thước tối thiểu của một đống 0 thế hệ trong .NET không?Thế hệ .NET 0 kích thước heap
Tôi có một sự phân định theo nhóm. Tôi có một hàm phân bổ khoảng 20-30 MB đối tượng 1KB, thực hiện điều gì đó với chúng và chấm dứt, để lại tất cả các đối tượng được phân bổ là GC-ed. Bây giờ, trong Performance Monitor, tôi có thể thấy rằng kích thước heap 0 thế hệ là 5-6 MB, điều đó là không đủ để chấp nhận tất cả 20-30 MB đối tượng mà tôi cần. Khi tôi bắt đầu phân bổ, tại một số điểm gen0 GC bắt đầu chạy, và vì tất cả các đối tượng là cần thiết, nó thúc đẩy chúng thành gen1. Lần tiếp theo GC bắt đầu chạy, các đối tượng này được thăng hạng trong gen2. Vì vậy, cuối cùng khoảng 15MB đối tượng của tôi kết thúc trong heap gen2. Đây là, bởi logic của tôi, các đối tượng tạm thời mà không có cách nào kết thúc trong heap gen2. Tôi tin rằng vấn đề là kích thước của kích thước heap gen0. Nhưng tôi không chắc chắn. Tôi biết rằng trong Java có một khả năng để thiết lập một kích thước tối thiểu của đống thế hệ. Có cách nào trong .NET?
Đối tượng lớn hơn 85K nói chung không đủ điều kiện để thu thập ngoại trừ trong Gen2. Nếu một tham chiếu đến một đối tượng mới được lưu trữ trong một đối tượng lớn hơn 85K, thì trừ khi tham chiếu bên trong đối tượng lớn bị hủy, đối tượng mới sẽ tăng lên Gen2 trước khi nó trở thành đủ điều kiện để thu thập, ngay cả khi đối tượng bị hủy bỏ trước đó. – supercat