I. Sur quelle technologie est basée la nouvelle plate-forme de compteur de performance de Windows ?

Les nouveaux compteurs de performances de Windows sont basés sur Event Tracing for Windows (http://msdn.microsoft.com/fr-fr/library/aa363668.aspx). Ils fournissent de meilleurs performances et une meilleur fiabilité, en permettant une collecte de données et de rapports, plus rapides, avec moins de consommation mémoire, tout en évitant l'enregistrement dans le registre Windows et le partage de mémoire.

Les développeurs n'ont plus besoin d'écrire et d'enregistrer des Dlls pour ajouter à leurs applications des compteurs de performance. En fait, ils n'ont plus besoin d'écrire de code du tout. A la place, ils créent des fichiers manifestes au format XML, qui décrivent les compteurs, et avec l'outil CTRPP.EXE, ils créent les coquilles C, qu'ils peuvent alors intégrer à leurs applications.

Le code généré par CTRPP.EXE, appelle directement les APIs PerfLib V 2.0 pour enregistrer les compteurs.

Exemple de manifeste
Sélectionnez
<instrumentationManifest>
  <instrumentation>
    <Counters>
      <Provider         callback="custom"
                        providerName="FournisseurSimpleDeCompteurs"
                        applicationIdentity="TestPerfLibV2.exe"
                        providerType="userMode"
                        providerGuid="{A64503B4-43DD-430d-8EFD-9DB77DBF0D17}"
                        >
        <counterSet
                        guid="{8B52B3AC-B74C-4772-82E3-E6A114AA3688}"
                        uri ="EV.Compteurs.TestSimple"
                        name=".A Test de compteurs"
                        description="Test de création de compteurs avec l'architecture V 2.0"
                        instances="single">

          <counter id="1"
                          uri="EV.Compteurs.TestSimple.Compteur1"
                          name="Compteur1"
                          type="perf_counter_rawcount"
                          detailLevel="standard"
                          description="Ceci est un test de compteur simple"
                          defaultScale="-1">            
          </counter>
        </counterSet>
                    
      </Provider>

    </Counters>
    
  </instrumentation >
</instrumentationManifest>
Exemple d'appel
Sélectionnez
ULONG PerfAutoInitialize(
    void
)
{
    ULONG Status = ERROR_SUCCESS;

    Status = PerfStartProvider(
            (LPGUID) & ProviderGuid_TestPerfLibV2_1,
            (PERFLIBREQUEST) ControlCallback_TestPerfLibV2_1,
            & hDataSource_TestPerfLibV2_1);
    if (Status != ERROR_SUCCESS) {
        goto Cleanup;
    }

    Status = PerfSetCounterSetInfo(
            hDataSource_TestPerfLibV2_1,
            (PPERF_COUNTERSET_INFO) & CtrSet_TestPerfLibV2_1_1,
            dwCtrSet_TestPerfLibV2_1_1);
    if (Status != ERROR_SUCCESS) {
        goto Cleanup;
    }

Cleanup:
    if (Status != ERROR_SUCCESS) {
        PerfStopProvider(hDataSource_TestPerfLibV2_1);
    }
    return Status;
}
Pour plus d'infos :