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

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

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

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

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

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

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

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

6.操作是线程安全的

PS:InsufficientMemoryException继承于OutOfMemoryException

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

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

CLR via C# 读书笔记 5-5 预留大内存相关推荐

  1. 《Linux内核设计与实现》读书笔记(十二)- 内存管理

    内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己来解决(用户空间的内存错误可以抛给内核来解决). 所有内核的内存管理必须要简洁而且高效. 主要内容: 内存的管理单元 获取内存的方法 ...

  2. CLR via C# 读书笔记 1-2 创建线程的成本

    在clr中创建线程的代价还是比较高的 ,他需要两个部分 内存: 线程核心对象, 存放描述线程的一些内容和上下文 . (内存消耗:700B-2500B) 线程环境,存放例如异常处理链之类. (内存消耗 ...

  3. CLR Via CSharp读书笔记(14):字符、字符串和文本处理

    数字类型与字符相互转换的三种技术: Casting: 最优效率,因为编译器产生IL指令来执行转换.C#允许开发者指明checked或unchecked代码以执行转换. 使用System.Convert ...

  4. CLR Via CSharp读书笔记(26) - 计算限制的异步操作

    执行上下文: 执行上下文包括安全设置(压缩栈.Thread的Principal属性和Windows身份), 宿主设置(System.Threading.HostExecutionContextMana ...

  5. CLR Via CSharp读书笔记(29) - 混合线程同步构造

    {TODO:} 转载于:https://www.cnblogs.com/thlzhf/p/3494561.html

  6. CLR Via CSharp读书笔记(7):常量和字段

    {TODO:} 转载于:https://www.cnblogs.com/thlzhf/archive/2012/12/06/2805424.html

  7. 有关堆栈溢出(in vs 2005)的读书笔记--堆栈中 申请大数组

    部分原创 66下一步 Vs 堆栈 理论修改的上限是多少 ? 问题2: 全局变量去 最大的上限是多少? 堆栈(休养版本测试) 2012年3月31日17:31:27 3月 从 10^5到 10^6数组,导 ...

  8. 【读书笔记】霍金《大设计》

    整理:fasiondog 图片和xmind文件下载分享地址:http://note.sdo.com/u/1517210336#/n/qrIHw~jukLnFnM00M00Ck7

  9. 《深入理解Java虚拟机》读书笔记(二)--自动内存管理机制

    目录 一.运行时数据区域 1.1 程序计数器 1.2 虚拟机栈 1.2.1 局部变量表 1.3 本地方法栈 1.4 堆 1.5 方法区 1.5.1 运行时常量池 1.5.2 本地直接内存 二.HotS ...

最新文章

  1. php的环境怎么配置文件,php环境下所有的配置文件以及作用
  2. CMake基础 第1节 初识CMake
  3. 在 Android 应用程序中使用 Internet 数据
  4. 网络服务器安全协议,ipsec 网络安全协议
  5. [文章备份]RSS阅读器在手机上APP配置方法
  6. 04 数据清洗与准备
  7. php opendir(),PHP opendir()用法及代码示例
  8. 如何安装biopython_Biopython安装
  9. Python 基于jieba的三国演义词频分析与可视化
  10. 边缘计算与深度学习——初读研究生的迷茫
  11. Excel如何实现行列转换及行倒置
  12. 卡通头像生成器Avataaars generator
  13. 用java制作扑克牌_java实现简单扑克牌游戏
  14. 计算机二级编程题题库
  15. 箭头函数(Arrow Function)
  16. pyecharts绘制日历图、漏斗图、仪表盘、水滴图
  17. Win10 下安装PhotoShop CS6
  18. 计算机基础 CMOS
  19. 192本软件著作用词分析(二)
  20. 深圳软件测试培训:软件测试质量

热门文章

  1. 训练日志 2018.10.18
  2. Problem Solving(POJ-3265)
  3. 取石子游戏(信息学奥赛一本通-T1218)
  4. 信息学奥赛C++语言:5个人分糖块
  5. 35 FI配置-财务会计-应收账款和应付账款-为客户定义备选统驭科目
  6. 19 FI配置-财务会计-定义销售/采购税代码
  7. simplexml php,PHP 使用 SimpleXML 遇到冒号「:」的解法
  8. java简单的复数类_Java练习 SDUT-4303_简单的复数运算(类和对象)
  9. [Unity] Perfab 和 Scene 中显示的物体局部坐标系的原点不是实际原点
  10. webserver介绍与实现(利用各模块的封装实现)