Izolovat nevracením paměti pomocí třídy PHD

Překlady článku Překlady článku
ID článku: 194655 - Produkty, které se vztahují k tomuto článku.
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Nevracení paměti jsou problém v mnoho aplikací. Konkrétní způsob určování nevracení paměti je použití třídy Visual C++ PHD poskytnuté v tomto článku. V aplikaci pomocí třídy PHD, protokolování statistiky paměti můžete získat přesnější představu, kde dochází k nevrácení paměti.

Samorozbalovací PHD.EXE je ukázka, která demonstruje použití zahrnuty PHD třídy prokázat/disprove nevracení paměti. Třída PHD je tenký souhrnný kolem funkce pomocník Performance z WINDOWSNT resource kit. Tento kód funguje pouze v systému Windows NT.

Další informace

K dispozici jsou Vám následující soubory ze sekce Ke Stažení:
Phd.exe
Datum vydání: X-23-1998

Další informace o tom, jak stahovat soubory podpory společnosti Microsoft, naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
119591Jak získat soubory podpory společnosti Microsoft ze serverů služeb online
Microsoft tento soubor zkontroloval na výskyt virů. Společnost Microsoft použila aktuální antivirový software, který byl k dispozici v den uveřejnění tohoto článku. Soubor je uložený na zabezpečených serverech neumožňujících neoprávněné změny souborů.
V ukázce jsou zahrnuty následující soubory klíče:
    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.
				

Použití třídy PHD zahrnout soubor RKLeak.cpp v projektu. Zahrnutím záhlaví souboru způsobí propojení knihovny PDH.lib, což je dodávána s Visual C++ 6.0. Také je třeba přidat vaše cestu souboru PHD.dll, aby aplikace najde.

Soubor TestMain.cpp obsahuje následující ukázkový kód demonstruje použití třídy PHD:

Ukázkový kód

   **************************************************
   #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);
      }

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

První použití konstruktoru PHD umožňuje určit položky, které chcete sledovat. Tyto jsou stejné položky, které jsou k dispozici v aplikaci Perfmon.exe.

Druhý použití PHD konstruktor (bez argumentů) použije následující výchozí sloupce protokoly: soukromé bajty, stránky souboru bajtů, bajty stránkovaného fondu bajtů nestránkovaného fondu a pracovní sady.

Jak můžete vidět z ukázkový kód třídy PHD používá umístit podezřelou leaking API smyčku a pravidelně volá metodu PHD::logData. Protokolována data do souboru s názvem "< EXE name>_perf.log" v aktuálním adresáři. Pokud výsledný soubor protokolu zobrazuje lineární zvýšení v soukromé bajty, neznamená toto zvýšení nevracení paměti v rozhraní API, ale pouze nevracení paměti v aplikaci. Pokud je rozhraní API je používán nesprávně (například není správně uvolnit prostředky přidělené počáteční volání), výsledky zobrazit pouze nevracení paměti, není vadný API. Zúžit problém vytvořit nejjednodušší možné aplikaci, která zastaralých rozhraní API dotyčný.

Visual C++ 5.x uživatelé potřebují komentář mimo následující řádky z RKLeak.h:
   #undef PdhOpenQuery      //          PdhOpenQueryA
   extern "C" long __stdcall
   PdhOpenQuery (
       IN      LPCSTR      szDataSource,
       IN      DWORD       dwUserData,
       IN      HQUERY      *phQuery
   );
				

Ostatní nástroje

Můžete hledat na webu stránek nejčastější dotazy informace o různých ladicí programy třetích stran, které mohou pomoci najít nevracení paměti. Například v následujících ČASTÝCH odkazem několik produktů:
http://docs.linux.cz/programming/c/www.eskimo.com/~scs/C-faq/q18.2.html
Poznámka: Produkty třetích stran zde popsána vyrábějí dodavatelů nezávislé na společnosti Microsoft; neposkytujeme žádnou záruku (implicitně předpokládanou ani jinou) týkající se výkonu nebo spolehlivosti těchto produktů. Měli byste si také poznamenat někdy false sestav nevracení provádět tyto produkty, ale stále jsou velmi užitečné nástroje.

Visual C++ haldy ladění API je také užitečný nástroj pro vyhledání nevrácené. Patří mezi funkce, například _CrtMemDifference() a _CrtMemDumpAllObjectsSince(), které jsou popsány v programu Visual C++ Programmer v části Reference funkce ladění. Tyto funkce pouze rozpoznat nevracení v kódu a nevracení v ostatních součástech.

(c) Microsoft Corporation 1998, všechny rezervované práv. Příspěvky Rick Anderson, Microsoft Corporation.

Vlastnosti

ID článku: 194655 - Poslední aktualizace: 1. března 2014 - Revize: 2.5
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbnosurvey kbarchive kbmt kbdownload kbfile kbinfo kbsample KB194655 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:194655

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