1

Я играл с Performance Monitor в Windows 7 и смог создать набор сборщиков данных, который отслеживает процесс и регистрирует оповещение, когда частные байты превышают некоторый порог. Я хочу использовать это, когда мы запускаем определенные тесты как грубый улов для серьезных утечек памяти.

Кажется, я должен запустить свое приложение, а затем вручную запустить набор сбора данных. Есть ли какой-нибудь способ, которым набор сбора данных может просто продолжать работать, даже если не отслеживается процесс, который он отслеживает? Если это невозможно, могу ли я связать начало набора данных с запуском моего приложения?

1 ответ1

0

После осмотра я обнаружил, что могу программно запустить набор сбора данных. Мой код выглядит примерно так:

#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();
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .