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(该方法内部减少了刚才保存数值的那个字段)
CLR via C# 读书笔记 5-5 预留大内存相关推荐
- 《Linux内核设计与实现》读书笔记(十二)- 内存管理
内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己来解决(用户空间的内存错误可以抛给内核来解决). 所有内核的内存管理必须要简洁而且高效. 主要内容: 内存的管理单元 获取内存的方法 ...
- CLR via C# 读书笔记 1-2 创建线程的成本
在clr中创建线程的代价还是比较高的 ,他需要两个部分 内存: 线程核心对象, 存放描述线程的一些内容和上下文 . (内存消耗:700B-2500B) 线程环境,存放例如异常处理链之类. (内存消耗 ...
- CLR Via CSharp读书笔记(14):字符、字符串和文本处理
数字类型与字符相互转换的三种技术: Casting: 最优效率,因为编译器产生IL指令来执行转换.C#允许开发者指明checked或unchecked代码以执行转换. 使用System.Convert ...
- CLR Via CSharp读书笔记(26) - 计算限制的异步操作
执行上下文: 执行上下文包括安全设置(压缩栈.Thread的Principal属性和Windows身份), 宿主设置(System.Threading.HostExecutionContextMana ...
- CLR Via CSharp读书笔记(29) - 混合线程同步构造
{TODO:} 转载于:https://www.cnblogs.com/thlzhf/p/3494561.html
- CLR Via CSharp读书笔记(7):常量和字段
{TODO:} 转载于:https://www.cnblogs.com/thlzhf/archive/2012/12/06/2805424.html
- 有关堆栈溢出(in vs 2005)的读书笔记--堆栈中 申请大数组
部分原创 66下一步 Vs 堆栈 理论修改的上限是多少 ? 问题2: 全局变量去 最大的上限是多少? 堆栈(休养版本测试) 2012年3月31日17:31:27 3月 从 10^5到 10^6数组,导 ...
- 【读书笔记】霍金《大设计》
整理:fasiondog 图片和xmind文件下载分享地址:http://note.sdo.com/u/1517210336#/n/qrIHw~jukLnFnM00M00Ck7
- 《深入理解Java虚拟机》读书笔记(二)--自动内存管理机制
目录 一.运行时数据区域 1.1 程序计数器 1.2 虚拟机栈 1.2.1 局部变量表 1.3 本地方法栈 1.4 堆 1.5 方法区 1.5.1 运行时常量池 1.5.2 本地直接内存 二.HotS ...
最新文章
- php的环境怎么配置文件,php环境下所有的配置文件以及作用
- CMake基础 第1节 初识CMake
- 在 Android 应用程序中使用 Internet 数据
- 网络服务器安全协议,ipsec 网络安全协议
- [文章备份]RSS阅读器在手机上APP配置方法
- 04 数据清洗与准备
- php opendir(),PHP opendir()用法及代码示例
- 如何安装biopython_Biopython安装
- Python 基于jieba的三国演义词频分析与可视化
- 边缘计算与深度学习——初读研究生的迷茫
- Excel如何实现行列转换及行倒置
- 卡通头像生成器Avataaars generator
- 用java制作扑克牌_java实现简单扑克牌游戏
- 计算机二级编程题题库
- 箭头函数(Arrow Function)
- pyecharts绘制日历图、漏斗图、仪表盘、水滴图
- Win10 下安装PhotoShop CS6
- 计算机基础 CMOS
- 192本软件著作用词分析(二)
- 深圳软件测试培训:软件测试质量
热门文章
- 训练日志 2018.10.18
- Problem Solving(POJ-3265)
- 取石子游戏(信息学奥赛一本通-T1218)
- 信息学奥赛C++语言:5个人分糖块
- 35 FI配置-财务会计-应收账款和应付账款-为客户定义备选统驭科目
- 19 FI配置-财务会计-定义销售/采购税代码
- simplexml php,PHP 使用 SimpleXML 遇到冒号「:」的解法
- java简单的复数类_Java练习 SDUT-4303_简单的复数运算(类和对象)
- [Unity] Perfab 和 Scene 中显示的物体局部坐标系的原点不是实际原点
- webserver介绍与实现(利用各模块的封装实现)