gpt4 book ai didi

.net - 追查 .NET 4.0 Induced GC 的来源

转载 作者:行者123 更新时间:2023-12-02 05:10:33 26 4
gpt4 key购买 nike

我正在使用 PerfMonitor.exe ( http://bcl.codeplex.com/wikipage?title=PerfMonitor ) 来追踪 .NET 4.0 应用程序的一些 .NET 性能问题,该应用程序使用一些第三方库,其中一些是 native 代码。

当我运行 Perfmonitor GCTime 报告时,它会列出各个 GC 并以多种方式对其进行分类。报告中的一栏称为“原因”。一些 GC 的 Reason="Induced",而其他 GC 的 Reason="SmallAlloc"。

我假设标记为“SmallAlloc”的 GC 是由常规分配 (New Object()) 引起的,而标记为“Induced”的 GC 是由对“System.GC.Collect”的调用引起的。如果您认为我的假设不正确,请告诉我。

我试图找到调用 System.GC.Collect 的代码,但一直没有成功。使用 MSVS 2010 Professional,我在 System.GC.Collect 中设置了一个断点,并通过编写一个包含对 System.GC.Collect 的调用的简单测试函数来确保该断点有效。但是,我正在调整的应用程序不会在该断点处中断,这让我相信没有任何代码调用 System.GC.Collect。

我在想,也许有 native 代码通过直接调用 mscorwks.dll 中的 native 函数并绕过 System.GC.Collect 来引发 GC。我看到 System.GC.Collect 在 mscorwks 中的 JitHelpers.cpp 中调用了 _Collect。有没有办法在该函数中设置断点?

最佳答案

我仔细查看了 PerfMonitor.exe 的输出。我不确定每个标记为“Induced”的 GC 实际上是由 System.GC.Collect 引发的。似乎所有第 1 代 GC 都标记为 Reason="Induced",而所有第 0 代 GC 都标记为 Reason="SmallAlloc"。 Gen2 GC 被标记为 Reason="LowMemory"。

有一个用于跟踪 .NET Induced GC 的性能计数器。我监控了那个性能计数器,它在我的过程中没有显示任何诱导的 GC。所以我断定 Perfmonitor.exe 误导了我。

关于.net - 追查 .NET 4.0 Induced GC 的来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6104741/

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