- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用大量内存的 ASP.NET/C# Web 应用程序。
ANTS Memory Profiler 和 PerfMon 都显示我的 Gen 0 堆在 Application_Start 期间快速增长到大约 1 GB。我读过here Gen 0 堆的 PerfMon 计数器实际上显示的是 Gen 0 的“预算”,而不是大小(我的意思是不是所有内存都是进程的私有(private)工作集的一部分?)。然而,ANTS 分析器确实显示了大约 700 MB 的“分配给 .NET 的未使用内存”,并且这确实似乎是进程的私有(private)工作集的一部分(如 taskmgr 中报告的)。我猜测大量未使用的内存与大型 Gen 0 堆有关。
发生这种情况时,Application_Start 中发生的情况是我处于 while 循环中,从 SqlDataReader 读取大约一百万行。这些被用来填充大型缓存以供以后使用。鉴于此,大量未使用内存的明显罪魁祸首是大型对象堆碎片,但我认为情况并非如此,因为我预分配的内存超出了大型缓存对象所需的内存。可以肯定的是,我什至尝试注释掉实际添加到我的缓存对象的循环部分;它对分配的未使用内存量没有影响。
作为测试,我经常尝试在循环期间强制执行 gen 0 的垃圾回收(我知道这与所有建议都是相反的),这导致 gen0 堆的大小保持在 128 MB 左右,并且还导致只有少数MB 未使用的可用内存。但它也耗尽了我的 CPU 并使 Application_Start 花费了太长的时间。
我的问题是:
1) 什么会导致所报告的 Gen 0 堆大小变得如此之大?
2)这是一个问题吗?特别是,它是否会导致大量未使用的空间分配给 .NET?
3)如果是这样,我应该做什么来解决它?如果我无法阻止进程在 Application_Start 期间使用那么多内存,我希望至少能够让它在应用程序启动完成时放弃内存。
最佳答案
Gen 0 包含“最年轻、最近分配的对象”,并且与 LOH 是分开且不同的。听起来像是您正在分配大量的小对象(与这些缓存条目相关的所有勘误表,听上去是这样),这些对象是无根的(通过频繁的 GC 保持较小的大小来证明)但没有清理干净及时,因为 GC 尚未认为有必要。 GC 根本没有发现需要进行清理。机器有多少内存?我猜你没有寻呼。
我的理解是,当 GC 认为不再需要时(例如,因为该堆空间已经很长时间没有使用),.NET 可以将未使用的堆 block 返回给操作系统。您是否长时间观察该应用程序,看看是否会出现这种情况?如果您不进行分页,我认为这不是问题。
关于asp.net - .NET 中的大型 Gen 0 堆,浪费内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8763899/
Webassembly:我找不到此语法的引用 (f32.const -0x0p+0) .它代表什么数字/位模式?它来自引用解释器的测试文件: https://github.com/WebAssembl
分析后,我发现我的程序有很大一部分内存被多重虚拟继承所浪费。 这是 MCVE 来演示问题 ( http://coliru.stacked-crooked.com/a/0509965bea19f8d9
如何在通过多个加载语句插入记录时避免跳过主 ID? 我通过 LOAD 语句将包含 150 条记录的文件插入到表中。 插入后表中最后一个primary id为150。 现在,当我通过加载语句插入另一个包
我开始了一份新工作,我正在工作的项目部分的结构非常奇怪。每个页面都是一个 .Net aspx 页面,并且加载得很好,但在加载时并没有真正执行任何操作。一切实际上都是从 jquery document.
我是一名优秀的程序员,十分优秀!