CLR via C# 讀書筆記 5-5 預留大內存
在進行需要很大內存空間的計算時,非常容易發生OutOfMemoryException
System.Runtime.MemoryFailPoint提供了在運行需要大內存的計算前進行內存檢查的功能
在調用該方法的時候執行了以下步驟(如果不完全確定所需的內存大小,可以傳近似值)
1.檢查系統的頁面文件是否有足夠大的可用空間,檢查進程中是否有足夠的連續虛擬地址空間
2.如果這里沒有足夠的空間,就會啟動GC嘗試回收一些內存
3.如果GC之后依然沒有足夠的頁面文件空間,,嘗試擴大頁面文件,如果頁面文件大小還是沒法達到要求,拋出InsufficientMemoryException
4.如果進程中沒有足夠的連續虛擬地址空間,拋出InsufficientMemoryException
5.如果存在足夠的內存和連續虛擬地址空間,那么需求的內存將被預留,并將代表內存大小的值添加在MemoryFailPoint的一個靜態字段里
6.操作是線程安全的
PS:InsufficientMemoryException繼承于OutOfMemoryException
如果操作過程沒有InsufficientMemoryException拋出,就說明你已經預留了足夠的內存用于你的計算,但是這些內存并沒有在物理上已經分配給你,這意味著預留內存成功并不意味著你的程序一定能執行成功,這個類存在的意義是為了幫你編寫更健壯的程序
此外,在操作完成時需要調用MemoryFailPoint.Dispose(該方法內部減少了剛才保存數值的那個字段)
浙公網安備 33010602011771號