Domanda

Qualcuno conosce un metodo per creare contatori delle prestazioni personalizzati utilizzando il normale Visual C++ non gestito?

So che può essere eseguito facilmente utilizzando C++ gestito, ma è necessario farlo utilizzando un servizio Windows non gestito.

So anche che puoi recuperare i dati dei contatori delle prestazioni, ma devo creare alcuni contatori personalizzati e incrementarli durante il runtime delle applicazioni.

È stato utile?

Soluzione

Vedere qui:http://msdn.microsoft.com/en-us/library/aa371925.aspx

Non è davvero difficile, ma un po' noioso poiché l'API comporta un ampio utilizzo di strutture autoreferenziali e di lunghezza variabile e deve impiegare alcuni meccanismi IPC per ottenere i dati dal processo monitorato.

Altri suggerimenti

Il supporto per l'aggiunta di contatori delle prestazioni C++ è cambiato in Vista e versioni successive.L'approccio DLL delle prestazioni suggerito in un'altra risposta funziona ancora, ma la nuova tecnica descritta Qui è più facile da usare.

In questo approccio scrivi un manifest che descrive i tuoi contatori, esegui CTRPP, uno strumento che genera codice dal tuo manifest.Compila e collega questo codice alla tua applicazione e aggiungi una chiamata per inizializzare il processo (avvia un thread in background) e aggiungi il codice per aggiornare i contatori secondo necessità.I dettagli della pubblicazione dei contatori vengono gestiti dal thread in background che esegue il codice generato.

È inoltre necessario eseguire lodctr /m:[file manifest] per registrare i contatori prima che possano essere utilizzati.Questo deve essere eseguito come amministratore.

A proposito:Un altro programma, unlodctr, inverte l'effetto di lodctr e deve essere utilizzato se si apportano modifiche ai contatori poiché non esiste un'operazione di "sostituzione", è sufficiente eliminare il vecchio e quindi installare il nuovo.

<RANT>La documentazione per tutto quanto sopra è semplicemente orribile.Ad esempio, lodctr è stato completamente rielaborato per Vista, ma il documento in MSDN è tutto per la versione XP e non è più applicabile.Se visiti MSDN, utilizza liberamente il pulsante "Questa documentazione non è utile" e forse Microsoft riceverà il messaggio.</RANT>

Non utilizzare le classi di monitoraggio delle prestazioni ATL.So che sono facili da aggiungere e hanno una procedura guidata e tutto il resto, ma sono irrimediabilmente disturbati.Li ho aggiunti a una delle mie app di sviluppo al lavoro, quindi ho dovuto rielaborare il codice 6 mesi dopo.Tutto sommato circa 3 settimane di lavoro perse a causa di quel rumore.

Stavo cercando qualcosa di un po' più semplice da implementare.Probabilmente dovrò utilizzare questo approccio.Un collega (grazie PJ) mi ha anche mostrato che esiste un tutorial di Scribble che è stato modificato per mostrare come aggiungere un contatore delle prestazioni utilizzando le classi ATL:Esempio di PerformanceScribble:Monitoraggio delle prestazioni in un'applicazione MFC

Il grande svantaggio è che attualmente la mia applicazione non utilizza MFC o ATL e dovrei aggiungerne il supporto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top