所以,我有这个非常有用的棒程序:static void Main(string[] args){new Dictionaryint,int(10000000);while (true){System.Threading.Thread.Sleep(1000);}}这甚至不会产生编译器的任何警告,这是令人惊讶的.运行...

所以,我有这个非常有用的棒程序:
static void Main(string[] args)
{
new Dictionary<int,int>(10000000);
while (true)
{
System.Threading.Thread.Sleep(1000);
}
}
这甚至不会产生编译器的任何警告,这是令人惊讶的.
运行它会分配一块内存.如果我运行多个副本,我最终会达到一个无法启动的程度,因为我已经没有内存了.
>为什么垃圾收集器不会清理内存,而是让系统进入没有足够内存用于新进程的状态?
>哎,为什么不优化内存分配?它永远不会被任何东西引用!
那么这里发生了什么?
解决方法:
垃圾收集器是非确定性的,并且响应内存压力.如果没有什么需要内存,它可能不会收集一段时间.它不能优化掉新的,因为它改变了你的代码:构造函数可能有副作用.此外,在调试中,它甚至更有可能决定不收集.
在发布/优化版本中,我希望在有充分理由的时候收集它.还有GC.Collect,但除了极端情况或某些分析需求外,通常应该避免这种情况.
作为“为什么” – GC“代”之间的GC行为存在差异;你在“大对象堆”(LOH)上有一些大数组.这个LOH是非常昂贵的继续检查,这可以进一步解释为什么它是如此不情愿.
本文标题为:c# – 为什么这个内存没有得到清理,或者根本没有分配?


基础教程推荐
- c# – USING块在网站与Windows窗体中的行为不同 2023-09-20
- C#调用摄像头实现拍照功能的示例代码 2023-03-09
- C#通过标签软件Bartender的ZPL命令打印条码 2023-05-16
- Unity shader实现高斯模糊效果 2023-01-16
- Unity 如何获取鼠标停留位置下的物体 2023-04-10
- 实例详解C#实现http不同方法的请求 2022-12-26
- C#中 Json 序列化去掉null值的方法 2022-11-18
- C#中的Linq to JSON操作详解 2023-06-08
- C# 解析XML和反序列化的示例 2023-04-14
- C#获取指定目录下某种格式文件集并备份到指定文件夹 2023-05-30