Điểm AddMemoryPressure là cho bộ thu gom rác biết rằng có một lượng lớn bộ nhớ được phân bổ với đối tượng đó. Nếu nó không được quản lý, người thu gom rác không biết về nó; chỉ phần được quản lý. Vì phần được quản lý là tương đối nhỏ, GC có thể cho phép nó vượt qua để thu gom rác nhiều lần, về cơ bản lãng phí bộ nhớ có thể cần phải được giải phóng.
Có, bạn vẫn phải phân bổ và phân bổ thủ công bộ nhớ không được quản lý. Bạn không thể thoát khỏi điều đó. Bạn chỉ cần sử dụng AddMemoryPressure để đảm bảo rằng GC biết nó ở đó.
Edit:
Vâng, trong trường hợp một, tôi có thể làm điều đó, nhưng nó muốn làm cho không có sự khác biệt lớn, như GC sẽ không thể làm một điều về kiểu của tôi , nếu tôi hiểu điều này một cách chính xác: 1) Tôi muốn khai báo biến của tôi, 8 byte được quản lý, 2MB byte không được quản lý. Sau đó tôi sẽ sử dụng nó, gọi vứt bỏ, vì vậy bộ nhớ không được quản lý được giải phóng. Ngay bây giờ nó sẽ chỉ ocuppy 8 byte. Bây giờ, với đôi mắt của tôi, đã được gọi trong AddMemoryPressure và RemoveMemoryPressure bắt đầu ở cuối sẽ không có gì khác biệt. Tôi đang làm gì sai? Xin lỗi vì đã anoying về điều này. - Jorge Branco
Tôi nghĩ rằng tôi gặp sự cố của bạn.
Có, nếu bạn có thể đảm bảo rằng bạn luôn gọi Dispose
, thì có, bạn không cần phải bận tâm với AddMemoryPressure và RemoveMemoryPressure. Không có sự tương đương, vì tham chiếu vẫn tồn tại và loại sẽ không bao giờ được thu thập.
Điều đó nói rằng, bạn vẫn muốn sử dụng AddMemoryPressure và RemoveMemoryPressure, vì mục đích đầy đủ. Điều gì sẽ xảy ra nếu, ví dụ, người dùng lớp học của bạn quên gọi Dispose?Trong trường hợp đó, giả sử bạn đã triển khai mẫu Xử lý đúng cách, bạn sẽ kết thúc việc xác nhận lại các byte không được quản lý của mình khi hoàn tất, tức là khi đối tượng được quản lý được thu thập. Trong trường hợp đó, bạn muốn áp lực bộ nhớ vẫn hoạt động, để đối tượng có nhiều khả năng được khai hoang hơn.
Vâng, điều đó không trả lời câu hỏi, lol. –
Tôi đã nói gần như chính xác những gì Steven Lyons nói, chỉ theo một cách khác. Làm sao nó không trả lời được câu hỏi? – Randolpho
Vâng, thực sự tôi đã đọc lại và chỉnh sửa bài đăng của mình. –