Bellek sızıntısı yalıtmak için PHD sınıf'ı kullanma

Makale çevirileri Makale çevirileri
Makale numarası: 194655 - Bu makalenin geçerli olduğu ürünleri görün.
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bellek sızıntıları birçok uygulama için bir sorun var. Bellek sızıntılarını belirlemek somut bir yolu da, bu makalede sağlanan PHD Visual C++ sınıfı kullanmaktır. Bellek istatistiklerini PHD sınıfını kullanarak bir uygulama günlüğü, burada, bir bellek sızıntısı oluşma daha kesin bir fikir edinebilirsiniz.

Kendi kendine ayıklanan PHD.EXE, içerdiği PHD nasıl gösteren bir bellek sızıntısı kanıtlar/disprove için sınıf bir örnektir. Windows NT Kaynak Seti'nden performans yardımcı işlevlerini etrafında ince bir sarmalayıcı PHD sınıftır. Bu kod, yalnızca Windows NT üzerinde çalışır.

Daha fazla bilgi

Aşağıdaki dosyalar Microsoft Yükleme Merkezi'nden yüklenebilir:
Phd.exe
Yayım Tarihi: Ekm-23-1998

Microsoft destek dosyalarını karşıdan yükleme konusunda ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
119591Microsoft Destek Dosyaları Çevrimiçi Hizmetler'den Nasıl Alınır
Microsoft bu dosyada virüs taraması yapmıştır. Microsoft, dosyanın kullanıma sunulduğu tarihteki en güncel virüs tarama yazılımını kullanmıştır. Dosya, üzerinde herhangi bir yetkisiz değişiklik yapılmasını engellemeye yardım eden geliştirilmiş güvenliğe sahip sunucularda depolanır.
Aşağıdaki anahtar dosyaları örnek almaktadır:
    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.
				

PHD sınıf'ı kullanmak için <a0></a0>, projenizde RKLeak.cpp dosyası içerir. Üstbilgi dosyasına ekleyerek, Visual C++ 6.0'ile birlikte sağlanan PDH.lib kitaplığına bağlantı neden olur. Ayrıca, böylece uygulama bulabilirsiniz, yolu PHD.dll dosya eklemeniz gerekir.

TestMain.cpp dosya PHD sınıfını gösteren aşağıdaki örnek kodu içerir:

Örnek kod

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

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

Ilk PHD kurucu kullanımını izlemek istediğiniz öğeleri belirlemenizi sağlar. Bunlar Perfmon.exe uygulamasında kullanılabilen aynı öğelerdir.

Aşağıdaki varsayılan sütun günlükler ikinci PHD kurucu (bağımsız değişkenler hiçbir) kullanımını kullanır: özel bayt, sayfa dosyasının bayt disk belleği havuzunun bayt olarak sayfalanmamış bayt havuzu ve kümesi çalışıyor.

Örnek kod da görebileceğiniz gibi PHD sınıfı bir döngüde tehlikeye düşebileceğinden şüphe duyulması leaking API koymak için kullanılır ve düzenli aralıklarla PHD::logData yöntemini ça??r?r. Verilerin günlüğe adlı dosyaya "< sizin EXE name>_perf.log" geçerli dizinde. Ortaya çıkan günlük dosyası, özel bayt doğrusal bir artış gösterir, bu artış bir API bellek sızıntısı olabilir, ancak yalnızca uygulama bir bellek sızıntısı göstermez. API yanlış (örneğin, doğru ilk çağrı tarafından ayrılan kaynakları serbest tarafından) kullanılırsa, yalnızca bir bellek sızıntısı, hatalı bir API sonuçları gösterir. Sorunun kapsamını daraltmak için <a0></a0>, API uygular basit olası uygulama söz konusu oluşturun.

Visual C++ 5.x kullanıcılar aşağıdaki satırları RKLeak.h gelen aç?klama gerekir:
   #undef PdhOpenQuery      //          PdhOpenQueryA
   extern "C" long __stdcall
   PdhOpenQuery (
       IN      LPCSTR      szDataSource,
       IN      DWORD       dwUserData,
       IN      HQUERY      *phQuery
   );
				

Diğer Araçlar

Bellek sızıntıları bulmanıza yardımcı olabilecek çeşitli üçüncü taraf hata ayıklayıcıları hakkında bilgi için SSS sayfalarındaki Web'de arayabilirsiniz. Örneğin, SSS, birkaç ürünü söz edilen:
http://docs.linux.cz/programming/c/www.eskimo.com/~scs/C-faq/q18.2.html
Not Burada ele alınan üçüncü taraf ürünleri Microsoft'tan bağımsız satıcılar tarafından üretilmiştir; garanti, örtük veya başka bir biçimde, bu ürünlerin performansı veya güvenilirliği konusunda. Bazen bu ürünlerin sızıntıları yanlış raporlarını değişiklik yapabilirsiniz, ancak yine de çok yararlı Araçlar oldukları etmelidirler.

Ayrıca, Visual C++ öbek API hata ayıklama sızıntıları bulmak için kullanışlı bir araçtır. Bu hata ayıklama işlevi başvuru bölümünde Visual C++ Programmer's Guide'de belgelenen _CrtMemDifference() ve _CrtMemDumpAllObjectsSince(), gibi işlevler içerir. Bu işlevler, sızıntıları yalnızca kodunuzu ve değil sızıntıları başka bileşenleri de algılar.

(c) Microsoft Corporation 1998, tüm hakları saklıdır. Katkıyı Rick Anderson'un, Microsoft Corporation.

Özellikler

Makale numarası: 194655 - Last Review: 22 Şubat 2014 Cumartesi - Gözden geçirme: 2.5
Bu makaledeki bilginin uygulandığı durum:
  • 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
Anahtar Kelimeler: 
kbnosurvey kbarchive kbmt kbdownload kbfile kbinfo kbsample KB194655 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:194655

Geri Bildirim Ver

 

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