繁体   English   中英

对于 .NET6 桌面应用程序,是否仍然可以在 perfmon/PerformanceCounter.dll 上访问 GC 统计信息?

[英]Is GC stats still accessible on perfmon/PerformanceCounter.dll for a .NET6 desktop app?

我们有一个在 .NET4.8 上运行的 WPF 应用程序 (x64),我们曾经使用 System.Diagnostics.PerformanceCounter 定期将 GC/内存相关统计信息打印到日志中。 (使用类别:“.NET CLR 内存”)

在我将它迁移到 .NET6 之后,“.NET CLR Memory”类别上的计数器会抛出错误,因为实例(即进程名称)丢失了。

然后我从 perfmon 检查了这一点,并意识到我们的应用程序不再显示在实例列表中。

由于我们将桌面应用程序分发给最终用户,因此我们会在他们运行应用程序时定期将 gc 统计信息记录到日志中。 所以使用外部工具 adhoc 不是我们的选择。

我想知道 .NET6 应用程序:

  • 如果仍然可以在应用程序内获取 GC 统计信息?
  • 如果是 - 类别“.NET CLR Memory”是否仍然是正确的类别?
  • 如果是 - performanceCounter 是否需要任何运行时配置来公开应用程序本身以供查询?
  • 如果没有 - 是否有其他 api 可以在应用程序中获取 GC 统计信息?

非常感谢您的帮助和建议!

我尝试了以下方法,但仍然无法在 perfmon 上找到该应用程序:

  • 使用(调试)和不使用 visual studio 启动应用程序。
  • 在 visual studio 上使用任何 CPU 启动应用程序(以前是 x64)。
  • 将自己添加到 Performance Monitor Users & Performance Log Users 组。 (我相信这无论如何都不相关,因为 perfmon 仍然可以在没有设置的情况下发现 .NET4.8 上的构建,并且可以毫无问题地从 performanceCounter.dll 读取数据。)
  • 要求 IT 添加我自己的管理员权限。
  • 在 .NET6 上启动一个简单的新控制台应用程序 - 结果相同 - 未在 perfmon 上发现。

在 .NET 6 中,仍然可以使用 System.Diagnostics.PerformanceCounter 类在应用程序内获取 GC 统计信息。 但是,“.NET CLR Memory”类别不再可用,您将需要使用不同的类别来获取您感兴趣的 GC 统计信息。

要使用 .NET 6 在应用程序内获取 GC 统计信息,您可以使用“.NET Core Memory”类别,其中包括各种 GC 相关统计信息的计数器,例如 GC 堆中的字节数、GC 收集次数已发生的事件,以及在 GC 中花费的时间。

.NET 6.0 改进了内置的 GC 统计信息,可以直接在GC类上访问,而不是使用性能计数器基础结构。 您可以通过调用新方法GC.GetGCMemoryInfo()获取有关当前进程内存使用情况的大量信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM