¿Configurar una alerta de Monitor de rendimiento para un proceso que se ejecuta ocasionalmente?

1

He estado jugando con el Monitor de rendimiento en Windows 7 y he podido crear un conjunto de recopiladores de datos que monitorea un proceso y registra una alerta cuando los Bytes privados exceden algún umbral. Quiero usar esto cuando ejecutamos ciertas pruebas como una captura bruta para las principales fugas de memoria.

Parece que tengo que iniciar mi aplicación y luego iniciar manualmente el conjunto de recopilación de datos. ¿Hay alguna manera de que el conjunto de recopilación de datos pueda seguir funcionando, incluso cuando el proceso que supervisa no se está ejecutando? Si eso no es posible, ¿hay alguna manera de vincular el inicio del conjunto de recopilación de datos al inicio de mi aplicación?

CoryR
fuente

Respuestas:

0

Después de hurgarme, descubrí que puedo iniciar el conjunto de recopilación de datos mediante programación. Mi código se ve algo como esto:

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