2010-10-14 74 views
6

我正在写一个ASP.NET MVC应用程序,我看到了一个我的行为似乎随机的表现。我最初的想法是,垃圾收集正在踢进并暂停应用程序一段时间,但我似乎无法找到一个按钮/开关来证明或反驳我的理论。Java的-verbose:gc命令行选项的.NET等价物是什么?

对于没有java的人-verbose:gc是一个命令行开关,您可以将它传递给java应用程序,当GC事件发生时需要将JVM打印出来并需要多长时间。

我试图使用vs2010性能工具和JetBrains dotTrace这两个有点像使用热核武器来破解一个小螺母。

+0

的GC花费的时间不说,容易界定。大多数GC不需要停止的程序,因为.net在客户端应用程序上使用并发GC。 – CodesInChaos 2010-10-14 14:27:44

回答

6

在.NET 4.0中,Windows的事件跟踪(ETW)为您提供了正在查找的信息。这是一个专门用于GC的程序。

FYI ETW速度非常快,并内置到内核中。随着ETW你应该能够得到的信息是这样 alt text

alt text

而得到这个信息没有从BCL团队被称为PerfMonitor

这里的工具都在使用的步骤工具来获取信息GC

  1. 启动CMD或PowerShell中以管理员 ,这需要收集ETW 跟踪
  2. 启动要 跟踪
  3. 发出命令“PerfMonitor.exe /过程:4180开始”的应用程序,其中4180 进程ID
  4. 做了必要的行动
  5. 然后发出“PerfMonitor .exe stop“
  6. 获取报告的命令 ”PerfMonitor.exe GCTime“。这将 生成一份报告,并在浏览器

打开它我也有blogged在大约相同的

HTH

+0

这就更好了.. ta。 – 2010-10-14 15:00:33

0

你的第一个猜测不应该是GC。对于所有正常的工作负载,您不会注意到.NET中的GC。

GC没有跟踪开关,但如果您仍然认为GC应该受到责备,您可以查看performance counters

+0

谢谢,这只是工作。你完全正确,这与GC没什么关系,不是那么容易:-) – 2010-10-14 14:45:03

相关问题