Prestatie meter waarde kan onverwacht vooruit leap

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 274323 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Op deze pagina

Symptomen

Het resultaat dat wordt geretourneerd door deQueryPerformanceCounterfunctie kan onverwacht leap forward van tijd tot tijd. Deze leap mogelijk enkele seconden vertegenwoordigen.

Oorzaak

Dit probleem treedt op als gevolg van een defect ontwerp van de peripheral component interconnect (PCI) naar de brug ISA (Industry Standard Architect ure) van sommige chipsets. Deze brug staat ook bekend als deZuid-brug. De sprong optreedt bij een zware belasting van PCI-bus wanneer het besturings systeem een aantal onverwachte resultaten van de brug. Het besturings systeem detecteert het onverwachte resultaten en berekent een bedrag toevoegen aan de prestatie meter. Dit zorgt ervoor dat de geretourneerde resultaten uitQueryPerformanceCountervooruit gaan.

Oplossing

Programma's moeten voor een onverwachte sprong kijken door de wijziging in de tijd die wordt bepaald door de opeenvolgende aanroepen vergelijkenQueryPerformanceCountermet de verandering in de tijd die wordt bepaald door de opeenvolgende aanroepen van deGetTickCountfunctie. Als er een belangrijke sprong die is gebaseerd opQueryPerformanceCounter(), maar geen vergelijkbare toename die is gebaseerd opGetTickCount, en kan worden aangenomen dat het prestatie meter item alleen geopend naar voren. De voorbeeld code aan het einde van dit artikel wordt gedemonstreerd hoe u dit doet.

Status

Dit besturings systeem gedrag is inherent aan het ontwerp. De prestatie teller aanpassing is nodig wanneer het besturings systeem onbetrouwbare gegevens van de chipset verkrijgt.

Meer informatie

Ontwerp gebreken binnen een computer chip genoemd errata. Deze tekortkomingen ontwerp kan het product af te wijken van de gepubliceerde specificaties. Neem contact op met de leverancier van de hardware voor de chipset voor informatie over errata in specifieke chipsets.

Een machine PCI onderdelen worden geïdentificeerd door een PCI-id in de volgende sleutel in het Windows-register:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI
De namen van de subsleutels hebben de volgende vorm
VEN_XXXX& DEV_jjjj& SUBSYS_aaaaaaaa& REV_bb
waarXXXX:jjjjHiermee geeft u de PCI-id.

Chips met de volgende PCI-id's zijn momenteel bekend vertonen een sprong in prestatie meter waarde:
Deze tabel samenvouwenDeze tabel uitklappen
PCI-IDHardwareleverancier
1039:0530Silicon Integrated Systems (SiS)
1039:0620Silicon Integrated Systems (SiS)
10B9:0533Acer Labs, Inc. (ALi)
10B9:1533Acer Labs, Inc. (ALi)
1106:0596VIA Technologies, Inc. (VIA)
1106:0686VIA Technologies, Inc. (VIA)
1166:004FServerWorks Corporation
1166:0050ServerWorks Corporation
8086:7110Intel Corporation
Deze lijst wordt bijgewerkt als Microsoft het gedrag in andere chipsets neemt.

Voorbeeldcode

De volgende voorbeeldcode wordt de methode beschreven voor het opsporen van prestatie meter item maar gedemonstreerd. Als de code wordt uitgevoerd op een computer met de chipset PIIX4, bijvoorbeeld verslag deze console toepassing sporadisch maar in de prestatie meter waarde.
#include <windows.h>
#include <stdio.h>

void main() {

   LARGE_INTEGER liFrequency;
   LARGE_INTEGER liCurrent;
   LARGE_INTEGER liLast;
   LARGE_INTEGER liRecent[10];
   DWORD dwCurrent;
   DWORD dwLast;
   DWORD dwPerfElapsed;
   DWORD dwTickElapsed;
   int i = 0;
   int j;

   // Save the performance counter frequency for later use.
   if (!QueryPerformanceFrequency(&liFrequency))
      printf("QPF() failed with error %d\n", GetLastError());

   // Query the performance counter value and tick count.
   dwCurrent = GetTickCount();
   if (!QueryPerformanceCounter(&liCurrent))
      printf("QPC() failed with error %d\n", GetLastError());

   liLast = liCurrent;
   dwLast = dwCurrent;

   while (TRUE) {

      // Query the performance counter value and tick count.
      if (!QueryPerformanceCounter(&liCurrent))
         printf("QPC() failed with error %d\n", GetLastError());
      dwCurrent = GetTickCount();

      // Store the performance counter value in the list of recent values.
      liRecent[i].QuadPart = liCurrent.QuadPart;
      i = (i+1) % 10;

      // Convert difference in performance counter values to milliseconds.
      dwPerfElapsed = (DWORD) (((liCurrent.QuadPart - liLast.QuadPart) 
            * 1000) / liFrequency.QuadPart);
      
      dwTickElapsed = dwCurrent - dwLast;

      // Check for a discrepancy greater than 500 milliseconds.
      if (abs(dwPerfElapsed - dwTickElapsed) > 500) { 

         // Print the previous 9 performance-counter values.
         for (j=9; j>0; j--) {
            printf("      Previous %d:  %I64X\n", j, liRecent[i].QuadPart);
            i = (i+1) % 10;
         }

         // Print the leap value.
         printf( "LEAP: Current:     %I64X  delta = %I64X\n", 
               liCurrent.QuadPart, liCurrent.QuadPart - liLast.QuadPart);
         
         // Retrieve and print the next 9 performance-counter values.
         for (j=1; j<=9; j++) {
            
            QueryPerformanceCounter(&liCurrent);
            printf("      Next     %d:  %I64X\n", j, liCurrent.QuadPart);
            
            liRecent[i].QuadPart = liCurrent.QuadPart;
            i = (i+1) % 10;
         }

         printf("\n");
      }

      liLast = liCurrent;
      dwLast = dwCurrent;
   }

   return;
}

Eigenschappen

Artikel ID: 274323 - Laatste beoordeling: zaterdag 26 februari 2011 - Wijziging: 2.0
De informatie in dit artikel is van toepassing op:
  • Microsoft Win32-API
Trefwoorden: 
kbapi kbkernbase kbperfmon kbprb kbmt KB274323 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:274323
Vrijwaring inhoud KB-artikelen over niet langer ondersteunde producten
Dit artikel heeft betrekking op producten waarvoor Microsoft geen ondersteuning meer biedt. Daarom wordt dit artikel alleen in de huidige vorm aangeboden en wordt het niet meer bijgewerkt.

Geef ons feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com