Visual Studio'da bellek kullanımını ölçme (C#, Visual Basic, C++, F#)

Hata ayıklayıcıyla tümleşik Bellek Kullanımı tanılama aracıyla hata ayıklarken bellek sızıntılarını ve verimsiz belleği bulun. Bellek Kullanımı aracı, nesne türlerinin bellek kullanımı etkisini anlamanıza yardımcı olmak için yönetilen ve yerel bellek yığınının bir veya daha fazla anlık görüntüsünü almanıza olanak tanır. Ayrıca, hata ayıklayıcı eklemeden veya çalışan bir uygulamayı hedefleyerek bellek kullanımını analiz edebilirsiniz. Daha fazla bilgi için bkz . Hata ayıklayıcı ile veya hata ayıklayıcı olmadan profil oluşturma araçlarını çalıştırma. İhtiyaçlarınıza en uygun bellek çözümleme aracını seçme hakkında bilgi için bkz . Bellek çözümleme aracı seçme.

Bellek Kullanımı aracında istediğiniz zaman bellek anlık görüntüleri toplayabilirsiniz, ancak performans sorunlarını araştırırken uygulamanızın nasıl yürütülebileceğini denetlemek için Visual Studio hata ayıklayıcısını kullanabilirsiniz. Kesme noktaları, adımlama, Tümünü Kes ve diğer hata ayıklayıcı eylemlerini ayarlamak, performans araştırmalarınızı en uygun kod yollarına odaklamanıza yardımcı olabilir. Uygulamanız çalışırken bu eylemleri gerçekleştirmek, ilginizi çekmeyecek kodun gürültüsünü ortadan kaldırır ve bir sorunu tanılamak için gereken süreyi önemli ölçüde azaltabilir.

Önemli

Hata ayıklayıcıyla tümleşik Tanılama Araçları, ASP.NET, ASP.NET Core, yerel/C++ geliştirme ve karma mod (.NET ve yerel) uygulamaları da dahil olmak üzere Visual Studio'da .NET geliştirme için desteklenir. Hata ayıklayıcı ile profil oluşturma araçlarını çalıştırmak için Windows 8 ve üzeri gereklidir (Tanılama Araçları penceresi).

Bu öğreticide şunları yapacaksınız:

  • Belleğin anlık görüntülerini alma
  • Bellek kullanım verilerini analiz etme

Bellek Kullanımı size ihtiyacınız olan verileri vermezse, Performans Profili Oluşturucu'daki diğer profil oluşturma araçları size yardımcı olabilecek farklı türde bilgiler sağlar. Çoğu durumda, uygulamanızın performans sorunu CPU, işleme kullanıcı arabirimi veya ağ isteği süresi gibi belleğinizden başka bir şeyden kaynaklanabilir.

Not

Özel Ayırıcı Desteği Yerel bellek profil oluşturucu, çalışma zamanında yayılan ayırma ETW olay verilerini toplayarak çalışır. Ayırma verilerinin yakalanabilmesi için CRT ve Windows SDK'daki ayırıcılara kaynak düzeyinde açıklama eklenmiştir. Kendi ayırıcılarınızı yazıyorsanız, myMalloc için bu örnekte görüldüğü gibi yeni ayrılmış yığın belleğine işaretçi döndüren tüm işlevler __declspec(ayırıcı) ile donatılabilir:

__declspec(allocator) void* myMalloc(size_t size)

Bellek kullanım verilerini toplama

  1. Visual Studio'da hata ayıklamak istediğiniz projeyi açın ve uygulamanızda bellek kullanımını incelemeye başlamak istediğiniz noktada bir kesme noktası ayarlayın.

    Bellek sorunundan şüphelendiğiniz bir alanınız varsa, bellek sorunu oluşmadan önce ilk kesme noktasını ayarlayın.

    İpucu

    Uygulamanız sık sık bellek ayırdığında ve bellekten ayrıldığında ilginizi çeken bir işlemin bellek profilini yakalamak zor olabileceğinden, belleğin değiştiği noktayı tam olarak bulmak için işlemin başında ve sonunda kesme noktaları ayarlayın (veya işlemde ilerleyin).

  2. Analiz etmek istediğiniz işlevin veya kod bölgesinin sonunda (veya şüpheli bir bellek sorunu oluştuktan sonra) ikinci bir kesme noktası ayarlayın.

  3. Tanılama Araçları penceresi, siz kapatmadığınız sürece otomatik olarak görüntülenir. Pencereyi yeniden açmak için Windows>Tanılama Araçlarını Göster hatalarını ayıkla'ya>tıklayın.

  4. Araç çubuğundaki Araçları Seç ayarıyla Bellek Kullanımı'nı seçin.

    Screenshot of Diagnostics Tools.

    Screenshot of Diagnostics Tools.

  5. Hata Ayıkla / Hata Ayıklamayı Başlat'a (veya araç çubuğunda başlat'a veya F5'e) tıklayın.

    Uygulamanın yüklenmesi tamamlandığında Tanılama Araçları'nın Özet görünümü görüntülenir.

    Screenshot of Diagnostics Tools Summary Tab.

    Not

    Bellek verilerini toplamak yerel veya karma mod uygulamalarınızın hata ayıklama performansını etkileyebileceğinden, bellek anlık görüntüleri varsayılan olarak devre dışı bırakılır. Yerel veya karma modlu uygulamalarda anlık görüntüleri etkinleştirmek için bir hata ayıklama oturumu başlatın (Kısayol tuşu: F5). Tanılama Araçları penceresi görüntülendiğinde Bellek Kullanımı sekmesini ve ardından Yığın Profili Oluşturma'yı seçin.

    Screenshot of Enable snapshots.

    Hata ayıklamayı durdurun (Kısayol tuşu: Shift+F5) ve yeniden başlatın.

    Screenshot of Diagnostics Tools Summary Tab.

    Not

    Bellek verilerini toplamak yerel veya karma mod uygulamalarınızın hata ayıklama performansını etkileyebileceğinden, bellek anlık görüntüleri varsayılan olarak devre dışı bırakılır. Yerel veya karma modlu uygulamalarda anlık görüntüleri etkinleştirmek için bir hata ayıklama oturumu başlatın (Kısayol tuşu: F5). Tanılama Araçları penceresi görüntülendiğinde Bellek Kullanımı sekmesini ve ardından Yığın Profili Oluşturma'yı seçin.

    Screenshot of Enable snapshots.

    Hata ayıklamayı durdurun (Kısayol tuşu: Shift+F5) ve yeniden başlatın.

  6. Hata ayıklama oturumunuzun başlangıcında anlık görüntü almak için Bellek Kullanımı özet araç çubuğunda Anlık görüntü al'ı seçin. (Burada bir kesme noktası ayarlamak da yardımcı olabilir.)

    Screenshot of Take Snapshot button.

    Screenshot of Take Snapshot button.

    İpucu

    Bellek karşılaştırmaları için bir temel oluşturmak için hata ayıklama oturumunuzun başlangıcında bir anlık görüntü almayı göz önünde bulundurun.

  7. İlk kesme noktanıza isabet edilmesine neden olacak senaryoyu çalıştırın.

  8. Hata ayıklayıcı ilk kesme noktasında duraklatılırken Bellek Kullanımı özet araç çubuğunda Anlık görüntü al'ı seçin.

  9. Uygulamayı ikinci kesme noktanızda çalıştırmak için F5 tuşuna basın.

  10. Şimdi bir anlık görüntü daha alın.

    Bu noktada verileri analiz etmeye başlayabilirsiniz.

    Veri toplama veya görüntüleme konusunda sorun yaşıyorsanız bkz . Profil oluşturma hatalarını giderme ve sorunları giderme.

Bellek kullanım verilerini analiz etme

Bellek Kullanımı özet tablosunun satırları, hata ayıklama oturumu sırasında almış olduğunuz anlık görüntüleri listeler ve daha ayrıntılı görünümlere bağlantılar sağlar.

Screenshot of Memory Usage table.

Screenshot of Memory Usage table.

Sütunun adı, proje özelliklerinde seçtiğiniz hata ayıklama moduna bağlıdır: .NET, yerel veya karma (hem .NET hem de yerel).

  • Nesneler (Fark) ve Ayırmalar (Fark) sütunları, anlık görüntü alındığında .NET ve yerel bellekteki nesne sayısını görüntüler.

  • Yığın Boyutu (Fark) sütunu.NET ve yerel yığınlardaki bayt sayısını görüntüler

Birden çok anlık görüntü aldığınızda, özet tablosunun hücreleri satır anlık görüntüsü ile önceki anlık görüntü arasındaki değerdeki değişikliği içerir.

Bellek kullanımını analiz etmek için, ayrıntılı bir bellek kullanımı raporu açan bağlantılardan birine tıklayın:

  • Geçerli anlık görüntü ile önceki anlık görüntü arasındaki farkın ayrıntılarını görüntülemek için okun (Memory Usage Increase) solundaki değişiklik bağlantısını seçin. Kırmızı ok bellek kullanımındaki artışı, yeşil ok ise azalmayı gösterir.

İpucu

Bellek sorunlarını daha hızlı tanımlamaya yardımcı olmak için fark raporları, genel sayı olarak en çok artan (Nesneler (Fark) sütunundaki değişiklik bağlantısına tıklayın) veya genel yığın boyutunda en çok artan nesne türlerine göre sıralanır (Yığın Boyutu (Fark) sütunundaki değişiklik bağlantısına tıklayın).

  • Yalnızca seçili anlık görüntünün ayrıntılarını görüntülemek için, değiştirilmeyen bağlantıya tıklayın.

    Rapor ayrı bir pencerede görüntülenir.

Yönetilen tür raporları

Bellek Kullanımı özet tablosunda nesneler (Fark) veya Ayırmalar (Fark) hücresinin geçerli bağlantısını seçin.

Screenshot of managed type report.

Screenshot of managed type report.

Üst bölmede, tür (Kapsayıcı Boyut) tarafından başvuruda bulunan tüm nesnelerin boyutu da dahil olmak üzere anlık görüntüdeki türlerin sayısı ve boyutu gösterilir.

Alt bölmedeki Kök Ağacına Giden Yollar, üst bölmede seçilen türe başvuran nesneleri görüntüler. .NET çöp toplayıcısı, yalnızca nesneye başvuran son tür serbest bırakıldığında nesnenin belleğini temizler.

Başvurulan Nesneler ağacı, üst bölmede seçilen tür tarafından tutulan başvuruları görüntüler.

Screenshot of Referenced Objects report.

Başvurulan Türler ağacı, üst bölmede seçilen tür tarafından tutulan başvuruları görüntüler.

Screenshot of Referenced Objects report.

Seçili bir türün örneklerini üst bölmede görüntülemek için nesne türünün yanındaki "Örnekleri Görüntüle" seçeneğine tıklayın.

Screenshot of the Instances view in the Memory Usage tool.

Screenshot of the Instances view in the Memory Usage tool.

Örnekler görünümü, üst bölmedeki anlık görüntüde seçili nesnenin örneklerini görüntüler. Kök ve Başvuruda Bulunan Nesnelere Giden Yollar bölmesi, seçili örneğe başvuran nesneleri ve seçilen örneğin başvurduğunu türleri görüntüler. Hata ayıklayıcı anlık görüntünün alındığı noktada durdurulduğunda, nesnenin değerlerini bir araç ipucunda görüntülemek için Değer hücresinin üzerine gelebilirsiniz.

Yerel tür raporları

Tanılama Araçları penceresinin Bellek Kullanımı özet tablosunda ayırmalar (Fark) veya Yığın Boyutu (Fark) hücresinin geçerli bağlantısını seçin.

Screenshot of Native Type View.

Screenshot of Native Type View.

Türler Görünümü, anlık görüntüdeki türlerin sayısını ve boyutunu görüntüler.

  • Seçili türdeki nesneler hakkındaki bilgileri anlık görüntüde görüntülemek için seçili türün örnekler simgesini (The instance icon in the Object Type column) seçin.

    Örnekler görünümü, seçilen türün her örneğini görüntüler. Örnek seçildiğinde, Ayırma Çağrı Yığını bölmesinde örneğin oluşturulmasıyla sonuçlanan çağrı yığını görüntülenir.

    Screenshot of the Instances view and Allocation Call Stack pane.

  • Seçili türün nesneleri hakkındaki bilgileri anlık görüntüde görüntülemek için seçili türün yanındaki Örnekleri Görüntüle'yi seçin.

    Örnekler görünümü, seçilen türün her örneğini görüntüler. Örnek seçildiğinde, Ayırma Çağrı Yığını bölmesinde örneğin oluşturulmasıyla sonuçlanan çağrı yığını görüntülenir.

    Screenshot of the Instances view and Allocation Call Stack pane.

  • Seçili türün ayırma yığınını görmek için Görünüm Modu listesinde Yığınlar Görünümü'nü seçin.

    Screenshot of Stacks view.

  • Seçili türün ayırma yığınını görmek için Yığınlar'ı seçin.

    Screenshot of Stacks view.

Bellek Kullanımı Analizler

Yönetilen bellek için Bellek Analizi aracı, birden çok güçlü yerleşik otomatik içgörü de sunar. Yönetilen türler raporlarında Analizler sekmesini seçtiğinizde Yinelenen dizeler, Seyrek diziler ve Olay işleyicisi sızıntıları gibi geçerli otomatik içgörüleri gösterir.

Screenshot of the insight view in the Memory Usage tool.

Yinelenen Dizeler bölümü, yığında birden çok kez ayrılan dizelerin listesini gösterir. Buna ek olarak, bu bölümde toplam boşa harcanan bellek (örnek sayısı - 1) dizesinin boyutunun katları gösterilir.

Seyrek Diziler bölümünde çoğunlukla sıfır öğeyle doldurulmuş diziler gösterilir ve bu diziler performans ve bellek kullanımı açısından verimsiz olabilir. Bellek çözümleme aracı bu dizileri otomatik olarak algılar ve bu sıfır değerlerden dolayı ne kadar belleğin boşa harcandığını gösterir.

Visual Studio 2022 sürüm 17.9 Önizleme 1'de bulunan Olay İşleyicisi Sızıntıları bölümü, bir nesne başka bir nesnenin olayına abone olduğunda oluşabilecek olası bellek sızıntılarını gösterir. Olayın yayımcısı aboneden daha uzun süre yaşarsa, başka bir başvuru olmasa bile abone hayatta kalır. Bu, kullanılmayan belleğin düzgün şekilde boşaltılmamasına ve uygulamanın zaman içinde daha fazla bellek kullanmasına neden olan bellek sızıntılarına neden olabilir.

Belirli türlerin, tuttukları yerel belleğin boyutunu belirlemek için okunabilecek alanları olduğu bilinmektedir. Analizler sekmesi, nesne grafında sahte yerel bellek düğümlerini gösterir. Bu düğümler, kullanıcı arabiriminin bunları tanıması ve boyutlarını ve başvuru grafını görüntülemesi için üst nesneleri tarafından tutulur.

Screenshot of the native insight view in the Memory Usage tool.

Raporları değiştirme (Fark)

  • Tanılama Araçları penceresindeki Bellek Kullanımı sekmesinin özet tablosunun hücresindeki değişiklik bağlantısını seçin.

    Screenshot of Choose a change link in a cell.

    Screenshot of Choose a change link in a cell.

  • Yönetilen veya yerel raporun Karşılaştır listesinden bir anlık görüntü seçin.

    Screenshot of Choose a snapshot from the Compare To list.

    Screenshot of Choose a snapshot from the Compare with list.

Değişiklik raporu, temel anlık görüntü değeri ile karşılaştırma anlık görüntüsü arasındaki farkı gösteren temel rapora sütunlar ((Diff) ile işaretlenmiş) ekler. Yerel Tür Görünümü fark raporu şöyle görünebilir:

Screenshot of Native Types Diff View.

Screenshot of Native Types Diff View.

Bloglar ve videolar

Hata Ayıklarken CPU ve Bellek Analizi

Visual C++ Blogu: Visual C++ 2015'te Bellek Profili Oluşturma

Sonraki adımlar

Bu öğreticide bellek kullanım verilerini toplamayı ve çözümlemeyi öğrendiniz. Profil oluşturucunun turunu zaten tamamladıysanız, profil oluşturma araçlarını kullanarak kodu iyileştirmeye yönelik genel bir yaklaşım hakkında bilgi edinmek isteyebilirsiniz.

Bu öğreticide, hata ayıklama sırasında bellek kullanım verilerini toplamayı ve çözümlemeyi öğrendiniz. Performans Profili Oluşturucu kullanarak yayın derlemelerinde bellek kullanımını analiz etme hakkında daha fazla bilgi edinmek isteyebilirsiniz.