登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
.NET陷阱之五:奇怪的OutOfMemoryException——大对象堆 ...
.NET陷阱之五:奇怪的OutOfMemoryException——大对象堆引起的问题与对策
[ 复制链接 ]
琦谓
2025-5-29 16:35:12
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
我们在开发过程中曾经遇到过一个奇怪的问题:当软件加载了很多比较大规模的数据后,会偶尔出现OutOfMemoryException异常,但通过内存检查工具却发现还有很多可用内存。于是我们怀疑是可用内存总量充足,但却没有足够的连续内存了——也就是说存在很多未分配的内存空隙。但不是说.NET运行时的垃圾收集器会压缩使用中的内存,从而使已经释放的内存空隙连成一片吗?于是我深入研究了一下垃圾回收相关的内容,最终明确的了问题所在——大对象堆(LOH)的使用。如果你也遇到过类似的问题或者对相关的细节有兴趣的话,就继续读读吧。
如果没有特殊说明,后面的叙述都是针对32位系统。
首先我们来探讨另外一个问题:不考虑非托管内存的使用,在最坏情况下,当系统出现OutOfMemoryException异常时,有效的内存(程序中有GC Root的对象所占用的内存)使用量会是多大呢?2G? 1G? 500M? 50M?或者更小(是不是以为我在开玩笑)?来看下面这段代码(参考 https://www.simple-talk.com/dotnet/.net-framework/the-dangers-of-the-large-object-heap/)。
1 public class Program
2 {
3 static void Main(string[] args)
4 {
5 var smallBlockSize = 90000;
6 var largeBlockSize = 1 << 24;
7 var count = 0;
8 var bigBlock = new byte[0];
9 try
10 {
11 var smallBlocks = new List<byte[]>();
12 while (true)
13 {
14 GC.Collect();
15 bigBlock = new byte[largeBlockSize];
16 largeBlockSize++;
17 smallBlocks.Add(new byte[smallBlockSize]);
18 count++;
19 }
20 }
21 catch (OutOfMemoryException)
22 {
23 bigBlock = null;
24 GC.Collect();
25 Console.WriteLine("{0} Mb allocated",
26 (count * smallBlockSize) / (1024 * 1024));
27 }
28
29 Console.ReadLine();
30 }
31 }
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
NET
陷阱
之五
怪的
OutOfMemoryException
相关帖子
C#/.NET/.NET Core技术前沿周刊 | 第 62 期(2025年11.17-11.23)
使用.NET开发并上线一个小智AI对话机器人的MCP服务转接平台
.NET 10 社区SDK(Loongarch 和 RISC-V)
.Net中WebApiController如何实现多版本兼容?
边界突围:中国.NET技术的七年认知演进与社区化生态重构
.NET+AI | MEAI | 自定义中间件(8)
基于 JSON 配置的 .NET 桌面应用自动更新方案
.NET周刊【11月第2期 2025-11-09】
.NET 生态系统中 LoongArch 与 RISC-V 的整合深度分析
go net/http 学习笔记
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
C#/.NET/.NET Core技术前沿周刊 | 第 62 期(2025年11.17-11.23)
1
389
剧拧并
2025-11-24
业界
使用.NET开发并上线一个小智AI对话机器人的MCP服务转接平台
0
1002
东门清心
2025-11-26
业界
.NET 10 社区SDK(Loongarch 和 RISC-V)
1
80
准挝
2025-11-26
业界
.Net中WebApiController如何实现多版本兼容?
0
591
孜尊
2025-11-27
业界
边界突围:中国.NET技术的七年认知演进与社区化生态重构
0
330
打阗渖
2025-11-30
业界
.NET+AI | MEAI | 自定义中间件(8)
0
87
田雅宁
2025-11-30
业界
基于 JSON 配置的 .NET 桌面应用自动更新方案
0
813
衣旱
2025-12-02
业界
.NET周刊【11月第2期 2025-11-09】
0
287
汤昕昕
2025-12-02
业界
.NET 生态系统中 LoongArch 与 RISC-V 的整合深度分析
1
784
替攀浮
2025-12-05
业界
go net/http 学习笔记
0
841
赴忽
2025-12-07
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
代码
签约作者
程序园优秀签约作者
发帖
琦谓
2025-5-29 16:35:12
关注
0
粉丝关注
26
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
anyue1937
9994893
kk14977
6845355
3934307807
991122
4
xiangqian
638210
5
宋子
9987
6
闰咄阅
9991
7
刎唇
9993
8
俞瑛瑶
9998
9
蓬森莉
9952
10
匝抽
9986
查看更多