CLR via C# 读书笔记 5-5 预留大内存

本文介绍如何使用System.Runtime.MemoryFailPoint类来检查系统是否具备足够的内存空间以执行大型计算任务,并预留所需内存,避免运行时出现内存不足的问题。

在进行需要很大内存空间的计算时,非常容易发生OutOfMemoryException

System.Runtime.MemoryFailPoint提供了在运行需要大内存的计算前进行内存检查的功能

在调用该方法的时候执行了以下步骤(如果不完全确定所需的内存大小,可以传近似值)

1.检查系统的页面文件是否有足够大的可用空间,检查进程中是否有足够的连续虚拟地址空间

2.如果这里没有足够的空间,就会启动GC尝试回收一些内存

3.如果GC之后依然没有足够的页面文件空间,,尝试扩大页面文件,如果页面文件大小还是没法达到要求,抛出InsufficientMemoryException

4.如果进程中没有足够的连续虚拟地址空间,抛出InsufficientMemoryException

5.如果存在足够的内存和连续虚拟地址空间,那么需求的内存将被预留,并将代表内存大小的值添加在MemoryFailPoint的一个静态字段里

6.操作是线程安全的

PS:InsufficientMemoryException继承于OutOfMemoryException

如果操作过程没有InsufficientMemoryException抛出,就说明你已经预留了足够的内存用于你的计算,但是这些内存并没有在物理上已经分配给你,这意味着预留内存成功并不意味着你的程序一定能执行成功,这个类存在的意义是为了帮你编写更健壮的程序

 

此外,在操作完成时需要调用MemoryFailPoint.Dispose(该方法内部减少了刚才保存数值的那个字段)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值