背景
我们使用 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# 中有没有其他方法可以做到这一点?
- 以前有没有人尝试过从另一个进程中获取这个堆大小?