Lưu ý: Tôi biết câu hỏi Memory management in memory intensive application, tuy nhiên câu hỏi đó dường như là về các ứng dụng phân bổ bộ nhớ thường xuyên, trong khi câu hỏi của tôi là về các ứng dụng được thiết kế cố ý để tiêu thụ càng nhiều bộ nhớ vật lý như là an toàn.Quản lý bộ nhớ cho các ứng dụng chuyên sâu bộ nhớ cố ý
Tôi có một ứng dụng máy chủ sử dụng lượng bộ nhớ lớn để thực hiện bộ nhớ đệm và các tối ưu hóa khác (nghĩ SQL Server). Ứng dụng chạy trên một máy chuyên dụng, và do đó có thể (và nên) tiêu thụ càng nhiều bộ nhớ như nó muốn/có thể tăng tốc và tăng thời gian phản hồi và đáp ứng mà không phải lo lắng tác động đến các ứng dụng khác trên hệ thống.
Vấn đề là nếu việc sử dụng bộ nhớ bị đánh giá thấp, hoặc nếu tải tăng khả năng kết thúc với các lỗi khó chịu do phân bổ bộ nhớ thất bại - trong tình huống này, điều tốt nhất cần làm là giải phóng bộ nhớ để ngăn chặn thất bại tại các chi phí của hiệu suất.
Một số giả thiết:
- Các ứng dụng đang chạy trên một máy chuyên dụng
- Các yêu cầu bộ nhớ của ứng dụng vượt quá bộ nhớ vật lý trên máy tính này (có nghĩa là, nếu bộ nhớ thêm đã có sẵn để ứng dụng nó sẽ luôn có thể sử dụng bộ nhớ đó theo cách nào đó để cải thiện thời gian phản hồi hoặc thông lượng)
- Bộ nhớ được quản lý hiệu quả theo cách sao cho phân mảnh bộ nhớ không phải là vấn đề.
- Ứng dụng này biết bộ nhớ nào có thể được giải phóng một cách an toàn và bộ nhớ nào cần được giải phóng trước tiên vì tác động hiệu suất ít nhất.
- Ứng dụng chạy trên một máy tính Windows
Câu hỏi của tôi là - làm thế nào tôi nên xử lý cấp phát bộ nhớ trong một ứng dụng như vậy? Cụ thể:
- Làm cách nào để dự đoán phân bổ bộ nhớ có bị lỗi hay không?
- Tôi có nên để lại một lượng bộ nhớ nhất định để đảm bảo rằng các hoạt động của hệ điều hành lõi vẫn đáp ứng (và không theo cách đó ảnh hưởng xấu đến hiệu suất của ứng dụng), và làm cách nào để tìm ra dung lượng bộ nhớ?
Mục tiêu cốt lõi là để ngăn ngừa các lỗi như là kết quả của việc sử dụng quá nhiều bộ nhớ, trong khi cùng một lúc sử dụng lên càng nhiều bộ nhớ càng tốt.
Tôi là nhà phát triển C#, tuy nhiên, hy vọng của tôi là các khái niệm cơ bản cho bất kỳ ứng dụng nào như vậy đều giống nhau bất kể ngôn ngữ.
Btw - Tôi đã cố tình mauge về thuật ngữ "bộ nhớ" vì sự phức tạp của bộ nhớ ảo vs vật lý. Đối với cùng một lý do tôi đã không đề cập đến 32 bit vs 64 bit. – Justin