Utilizzare la classe PHD per isolare perdite di memoria

Traduzione articoli Traduzione articoli
Identificativo articolo: 194655 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo Ŕ stato archiviato. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

Perdite di memoria costituiscono un problema in molte applicazioni. Di rilevamento di perdite di memoria in modo concreto consiste nell'utilizzare la classe PHD Visual c ++ fornita in questo articolo. Registrando le statistiche di memoria in un'applicazione utilizzando la classe PHD, Ŕ possibile ottenere un'idea pi¨ precisa in cui si sta verificando una perdita di memoria.

Il PHD.EXE autoestraente Ŕ un esempio che illustri l'uso di PHD incluso classe per dimostrare/disprove una perdita di memoria. La classe di PHD Ŕ un sottile wrapper per le funzioni di supporto di prestazioni dal resource kit di Windows NT. Questo codice funziona solo in Windows NT.

Informazioni

Sono disponibili i file seguenti dall'Area download Microsoft:
Phd.exe
Data di rilascio: 23 / 10 / 1998

Per ulteriori informazioni su come scaricare file di supporto Microsoft, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
119591Come ottenere file di supporto Microsoft dai servizi online
Microsoft analizzati questo file per individuare eventuali virus. Microsoft ha utilizzato il software antivirus pi¨ recente disponibile alla data di pubblicazione del file. Il file Ŕ archiviato in server con protezione avanzata per impedire modifiche non autorizzate al file.
I file di chiavi seguenti sono inclusi nell'esempio:
    FileName                Description
    ---------------------------------------------------------
   PDH.dll                  Contains helper functions used by PHD.
   RKLeak.cpp               Contains the code for the PHD class.
   RKLeak.h                 Header file for the PHD class.
   TestMain.cpp             A simple program to demonstrate the PHD class.
				

Per utilizzare la classe PHD, includere il file RKLeak.cpp nel progetto. Includendo il file di intestazione, si causerÓ un collegamento alla libreria PDH.lib, fornito con Visual c ++ 6.0. ╚ inoltre necessario aggiungere il file PHD.dll il percorso in modo che l'applicazione risulterÓ.

Il file di TestMain.cpp contiene codice di esempio riportato di seguito viene illustrato come utilizzare la classe PHD:

Codice di esempio

   **************************************************
   #include "rkLeak.h"

   void main()
   {

      char *myCntrs[]={
         "\\Memory\\Available bytes",
         "\\Memory\\committed bytes",
         "\\Memory\\pool Paged bytes",
         "\\Memory\\pool Nonpaged bytes",
      };

      PHD mphd2(myCntrs,sizeof(myCntrs)/sizeof(myCntrs[0]));
      PHD mphd;

      const int arSize=4096;
      for (int i=0;i<5;i++){
         double *d = new double[arSize];
         d[0]= 1.;      d[arSize-1] = 2.;  // Force to committed mem.
         mphd.logData(i);
         mphd2.logData(i);
      }

   ***************************************************
				

Il primo utilizzo del costruttore PHD consente di specificare quali elementi si desidera monitorare. Questi sono gli elementi stessi disponibili nell'applicazione perfmon.exe.

Il secondo utilizzare il costruttore PHD (senza argomenti) utilizza i seguenti registri colonna predefinito: byte privati, pagina file byte, byte del pool di paging, pool non di paging byte e working set.

Come si pu˛ vedere dal codice di esempio, la classe PHD viene utilizzata per inserire l'API di perdite sospetto in un ciclo e periodicamente chiama il metodo PHD::logData. I dati vengono registrati in file con nome "< il name>_perf.log EXE" nella directory corrente. Se il file registro risultante un aumento lineare di byte privati, questo aumento non implica una perdita di memoria nell'API, ma semplicemente una perdita di memoria dell'applicazione. Se l'API viene utilizzata in modo non corretto (ad esempio liberando non correttamente le risorse allocate per la chiamata iniziale), i risultati indicano solo una perdita di memoria, non Ŕ un'API difettosa. Per circoscrivere il problema, creare l'applicazione di possibile pi¨ semplice che utilizza l'API in questione.

Gli utenti di Visual c ++ 5.x desiderano commentare le righe da RKLeak.h riportate di seguito:
   #undef PdhOpenQuery      //          PdhOpenQueryA
   extern "C" long __stdcall
   PdhOpenQuery (
       IN      LPCSTR      szDataSource,
       IN      DWORD       dwUserData,
       IN      HQUERY      *phQuery
   );
				

Altri strumenti

╚ possibile cercare sul Web nelle pagine di domande frequenti per informazioni sui diversi debugger di terze parti che consentono di individuare perdite di memoria. Ad esempio, le domande frequenti seguenti sono segnalati numerosi prodotti:
http://docs.linux.cz/programming/c/www.eskimo.com/~scs/C-faq/q18.2.html
Nota I prodotti di terze parti illustrati di seguito sono forniti da produttori indipendenti; non offre alcuna garanzia, implicita o esplicita, riguardo alle prestazioni o l'affidabilitÓ di questi prodotti. Si noti inoltre che in alcuni casi questi prodotti consentono di false segnalazioni di problemi, ma sono comunque strumenti molto utili.

Inoltre, l'heap di Visual c ++ debug API Ŕ uno strumento utile per individuare perdite. Ad esempio funzioni, ad esempio _CrtMemDifference() e _CrtMemDumpAllObjectsSince(), documentate nel manuale del programmatore di c ++ Visual nella sezione relativa funzione di debug. Queste funzioni consente solo di rilevare perdite nel codice e non le perdite in altri componenti.

(c) 1998 Microsoft Corporation, tutti i diritti riservati. Con il contributo di Rick Anderson, Microsoft Corporation.

ProprietÓ

Identificativo articolo: 194655 - Ultima modifica: sabato 22 febbraio 2014 - Revisione: 2.5
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual Studio 6.0 Enterprise Edition
  • Microsoft Visual Studio 97 Service Pack 3
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Chiavi:á
kbnosurvey kbarchive kbmt kbdownload kbfile kbinfo kbsample KB194655 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 194655
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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