gpt4 book ai didi

.net - clr profiler api:ICorProfilerCallback::ExceptionThrown GC 安全吗

转载 作者:行者123 更新时间:2023-12-03 18:03:20 26 4
gpt4 key购买 nike

我想知道在 .net 框架分析器中,ExceptionThrown ( https://learn.microsoft.com/en-us/dotnet/framework/unmanaged-api/profiling/icorprofilercallback-exceptionthrown-method) 是否保证不会与 GC 重叠?

查看文档,它看起来是这样的——“如果探查器在此处阻塞并尝试进行垃圾收集,则运行时将阻塞,直到此回调返回”

但是,我运行了附加到 paint.net(https://www.getpaint.net/ - 版本 4.1.6)的探查器,并看到了一个在 ExceptionThrown 期间获得 GC 的特定情况。 (但那是非常罕见的——只发生在启动时,大约每 20 次运行只发生一次)——这导致数据在我阅读它时发生变化,因为 gc 移动了它。

至少在 .net 核心版本中 - https://github.com/dotnet/coreclr/blob/master/Documentation/botr/profiling.md它明确说明哪些回调是 GC 标注安全的。 ExceptionThrown 不是其中之一。 ExceptionUnwindFunctionEnter 是,例如。然而,回到 .NET 框架 - https://learn.microsoft.com/en-us/dotnet/framework/unmanaged-api/profiling/icorprofilercallback-exceptionunwindfunctionenter-method - 在 .NET Framework 文档中,关于 GC 的评论与 ExceptionThrown 的评论相同。

我知道 .NET 核心 != .NET 框架。但是,我觉得他们的分析器代码非常相似并且具有相同的保证。我找不到关于 .NET 框架回调的 GC 安全性的类似资源。

所以在所有这些介绍之后,我的问题是:

  1. .NET Framework clr profiler ExceptionThrown 回调应该是 GC 安全的。如果是这样,我怎么会看到 GC 调用在 ExceptionThrown 期间开始和结束(可能是 clr 中的错误或预期的行为)?

  2. 如果不是错误,我是否可以至少 100% 依赖 .NET Framework clr 探查器 UnwindExceptionFunctionEnter 回调基于围绕 core-clr 的类似文档是 GC 安全的?

谢谢

最佳答案

是的,允许 GC 运行。 .NETCore 接口(interface)与 .NETFramework 接口(interface)没有根本区别,github 文档是准确的。

the CLR source就很容易看出.虽然测试人员似乎一直在 Ballmer Peak 工作,但他的契约(Contract)声明一定是准确的。复制/粘贴相关代码:

    // Preemptive mode would be bad, dude.  There's an objectId in the param list!
MODE_COOPERATIVE;

MODE_COOPERATIVE 宏指示 GC 已启用。 MODE_PREEMPTIVE 宏表示 GC 被延迟。

关于.net - clr profiler api:ICorProfilerCallback::ExceptionThrown GC 安全吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55348083/

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