![]() |
1
12
是的,这听起来确实太过分了。减少GC的数量可能是减少应用程序运行时(如果这是您的目标)所能采取的最好的一步。 GC中的高百分比时间通常是由分配然后丢弃数千或数百万个对象引起的。一个很好的方法就是使用内存分析器工具。 微软提供免费 CLR Profiler . 这将向您显示每个分配,但会使您的应用程序运行速度慢10-60倍。您可能需要在较少的输入数据上运行它,以便在合理的时间内完成分析。 一个伟大的商业工具是科技 .NET Memory Profiler . 这就减少了运行时开销,并且提供了一个免费的试用版。通过在进程运行时拍摄多个快照,您可以了解频繁分配(然后销毁)的对象类型。 一旦确定了分配的来源,您就需要检查代码并找出如何减少这些分配。虽然没有一个适合所有答案的尺寸,但我过去遇到的一些问题包括:
|
![]() |
2
2
我说得对吗? 是的,你是对的 我可以走的路线来弄清楚为什么会发生这么多GC? 1.-看一看 PerfView
参见: Improving Managed Code Performance 2.-查看是否在代码或第三方库中的任何位置调用GC.Collect或GC.WaitForPendingFinalizer。后者会导致高CPU利用率。 |
![]() |
3
1
另一个原因可能是大量的gen-1或gen-2集合,每一个都需要花费更多的时间,这是由于长时间地挂在对象上造成的。 我在Web应用程序中看到过这样的情况,当有缺陷的对象挂在实际的页面对象上时——强制页面和引用它们的其他对象一样长。 断开对象和页面之间的链接(在本例中)会导致gc降至非常低的值。我们的站点现在有100+次点击/秒,GC时间通常为1%或更少。 |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |