2

背景

我们使用 Telerik TestStudio(Visual Studio 插件)进行了自动化测试。这将连接到我们的 WPF 应用程序并执行测试,因此自动化作为一个进程运行,而我们的应用程序作为另一个进程运行。现在我想测量和保护,以便我们没有任何内存泄漏或类似情况,我们希望在开发过程中尽早看到这一点,在它到达客户之前。

测量内存是没有问题的。但 .NET CLR 内存堆大小似乎更棘手。

这与我所追求的 Windows 性能监视器得到的结果相同。(perfmon.exe) 性能监视器

我试过的

垃圾收集器包含我的进程的这些信息,所以我不能使用它

var heap = GC.GetTotalMemory();

我尝试的是使用WMI类来获得这个但没有成功。有一个类很有趣:Win32_PerfFormattedData_NETFramework_NETCLRMemory 所以我想我会试一试..

var searcher = new ManagementObjectSearcher(@"select * from Win32_PerfFormattedData_NETFramework_NETCLRMemory");
foreach (ManagementBaseObject baseObject in searcher.Get())
{
    var heap0 = baseObject["HeapSize0"];
    var heap1 = baseObject["HeapSize1"];
    var heap2 = baseObject["HeapSize2"];
}

上面的问题是 Get() 根本不返回任何内容,如果我将断点放在 foreach 循环的第一行,它将不会进入。

问题

  • 在 C# 中有没有其他方法可以做到这一点?
  • 以前有没有人尝试过从另一个进程中获取这个堆大小?
4

1 回答 1

4

看看这个博客。我认为它可以回答您的问题。
如何正确读取 .NET 性能计数器

于 2013-01-07T08:17:51.543 回答