gpt4 book ai didi

c# - "Indicates the start of a managed heap garbage collection"到底是什么意思,是不是不好?

转载 作者:行者123 更新时间:2023-11-30 19:35:51 27 4
gpt4 key购买 nike

具体是做什么的

Indicates the start of a managed heap garbage collection

意思是,它不好吗?

在运行 visual studio 调试器时,我正在查看进程内存,当我的一个操作发生时,进程内存图中有许多黄色符号,表示许多“表示托管堆的开始垃圾收集”操作已经发生。代码在合理的时间内处理,这是一件坏事吗?

最佳答案

What does "Indicates the start of a managed heap garbage collection" mean?

CLR 有一个垃圾收集器。它跟踪正在使用的内存量,当它的启发式方法表明现在可能是尝试回收未使用内存的好时机时,它会收集垃圾内存并释放它。这样做会压缩堆。

is it bad?

有多种不同的垃圾回收策略,具体取决于您使用的 CLR 版本及其配置方式。他们中的一些人是“停止世界”的收藏家;也就是说,在收集发生时,您的程序会暂停几毫秒。 如果您的程序需要实时或近乎实时地处理时间预算少于几毫秒的事件,那么在错误的时间进行收集可能会非常糟糕

例如,假设您正在编写代码来分析一枚以每秒数千米的速度移动的来袭导弹的飞行路径,并触发一些反制措施。如果因为在错误的时间进行了垃圾收集而导致几毫秒的错误,那么您的分析可能会偏离几米,并且您可能会错过目标。 不要用 C# 编写运行导弹拦截系统的软件。人们可能会死。这真的很糟糕。

例如,假设您正在编写一个每秒刷新屏幕 60 次的游戏。这使您每次刷新只需不到 17 毫秒的时间来完成所有必要的游戏计算。如果这样做需要 14 毫秒,那么垃圾回收可能会导致您错过一帧。游戏玩家可能会被激怒。这真的很糟糕。

例如,假设您正在编写更新数据库的行业软件,更新数据库需要十秒钟。垃圾收集可能会中断它,然后可能需要十秒加三毫秒。那还不错。没关系。

从用户体验性能的角度分析您的应用程序,设置性能预算,并验证垃圾回收是否使您保持在预算范围内。如果您不在垃圾收集预算范围内,那么您需要使用特殊技术来控制执行收集的方式和时间,以确保它们在预算内发生。

特别是,如果您超出了收集的性能预算,那么您必须管理收集压力。 “压力”是 GC 用来决定何时收集的启发式;它是最近分配了多少内存、分配的大小、内存存活了多少个集合以及许多其他因素的组合。

当我们设计 Roslyn(当前一代的 C# 编译器技术)时,我们必须非常小心地管理集合压力,因为编译器会在编辑器中的击键之间进行许多非常小的分配。在某些情况下,由于不需要的集合,我们的分析速度不够快,无法在键入期间产生 IntelliSense 行为。我们使用了多种技术来减少压力,以及收集器在收集期间移动内存所必须做的工作量。

这些是高级技术。如果您在预算之内,请不要担心它们。但是在您制定预算并衡量您是否在预算内之前,您不会知道自己是否在预算内!

关于c# - "Indicates the start of a managed heap garbage collection"到底是什么意思,是不是不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51267428/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com