我一直在使用 Windows 7 中的性能监视器,并能够创建一个数据收集器集来监视进程,并在专用字节超过某个阈值时记录警报。当我们运行某些测试时,我想使用它来粗略地捕获主要内存泄漏。
似乎我必须先启动应用程序,然后手动启动数据收集集。有没有办法让数据收集集保持运行,即使它监视的进程没有运行?如果这不可能,有没有办法将数据收集集的启动与应用程序的启动联系起来?
答案1
经过一番探索,我发现我可以通过编程启动数据收集集。我的代码如下所示:
#include <pla.h>
void start_perfmon_data_collection_set(const wchar_t* dcs_name)
{
IDataCollectorSet* pdcs;
HRESULT hr = CoCreateInstance(__uuidof(DataCollectorSet),
NULL,
CLSCTX_SERVER,
__uuidof(IDataCollectorSet),
(void**) &pdcs);
if (FAILED(hr))
{
TRACE(L"CoCreateInstance(__uuidof(DataCollectorSet) failed with 0x%x.\n", hr);
return;
}
if (FAILED(pdcs->Query(dcs_name, NULL)))
{
TRACE(L"unable to query %s\n", dcs_name);
}
else
{
if (FAILED(pdcs->Start(false)))
{
DataCollectorSetStatus status;
pdcs->get_Status(&status);
TRACE(L"status = %d\n", status);
}
}
pdcs->Release();
}