Yayın derlemelerinde bellek kullanımını analiz etme (C#, Visual Basic, C++, F#)
Bellek Kullanımı aracı, uygulamanızın bellek kullanımını izler. Visual Studio'da etkin olarak geliştirmekte olduğunuz senaryoların gerçek zamanlı bellek etkilerini incelemek için aracını kullanabilirsiniz. Uygulamanın bellek durumlarının ayrıntılı anlık görüntülerini alabilir ve bellek sorunlarının kök nedenlerini bulmak için anlık görüntüleri karşılaştırabilirsiniz. Bellek Kullanımı aracı .NET, ASP.NET, C++ veya karma mod (.NET ve yerel) uygulamalarında desteklenir.
Bellek Kullanımı aracı, sürüm ya da hata ayıklama derlemelerindeçalıştırabilir. Bu makalede, yayın derlemeleri için önerilen Visual Studio Performans Profili OluşturucuBellek Kullanımı aracının nasıl kullanılacağını göstereceğiz. gereksinimleriniz için en iyi bellek çözümleme aracını seçme hakkında bilgi için bkz. Bellek çözümleme aracı seçme.
Bu belgelerle en iyi deneyim için makalenin üst kısmındaki listeden tercih ettiğiniz geliştirme dilini veya çalışma zamanını seçin.
Bellek Kullanımı tanılama oturumları
Bellek Kullanımı'nın tanılama oturumunu başlatmak için:
Visual Studio'da bir proje açın.
Bellek Kullanımı aracı .NET, ASP.NET, C++ veya karma mod (.NET ve yerel) uygulamaları destekler.
Hata Ayıkla menüsünde çözüm yapılandırmasını Yayın olarak ayarlayın ve dağıtım hedefi olarak Yerel Windows Hata Ayıklayıcısı (veya Yerel Makine) seçin.
Menü çubuğunda Hata Ayıklama>Performans Profili Oluşturucuöğesini seçin.
Kullanılabilir Araçlar altında, Bellek Kullanımıöğesini ve ardından başlangıç seçin.
Bellek kullanımını izleme
Tanılama oturumu başlattığınızda uygulamanız başlatılır ve Tanılama Araçları penceresinde uygulamanızın bellek kullanımına ilişkin bir zaman çizelgesi grafiği görüntülenir.
Zaman çizelgesi grafiği, uygulama çalışırken bellek dalgalanmalarını gösterir. Grafikteki ani artışlar genellikle bazı kodların veri topladığını veya veri oluşturduğunu ve daha sonra, işlem tamamlandığında veriyi attığını gösterir. Büyük ani artışlar, iyileştirebileceğiniz alanları gösterir. Asıl endişe, döndürülmeyen bellek tüketimindeki artıştır. Bu, verimsiz bellek kullanımına veya hatta bellek sızıntısına işaret edebilir.
Uygulama bellek durumlarının anlık görüntülerini alma
Bir uygulama çok sayıda nesne kullanır ve analizinizi tek bir senaryoya yoğunlaştırmak isteyebilirsiniz. Ya da araştırmak için bellek sorunları bulabilirsiniz. Belirli anlarda bellek kullanımını yakalamak için tanılama oturumu sırasında anlık görüntüler alabilirsiniz. Bellek sorunu ortaya çıkmadan önce uygulamanın temel anlık görüntüsünü almak iyidir. Sorunun ilk ortaya çıkmasından sonra başka bir anlık görüntü alabilir ve senaryoyu tekrarlayabilirseniz ek anlık görüntüler alabilirsiniz.
tr-TR: Anlık görüntüleri toplamak için, bellek verilerini yakalamak istediğinizde Anlık görüntü al seçeneğini tıklayın.
Tanılama oturumunu kapatma
Rapor oluşturmadan izleme oturumunu durdurmak için tanılama penceresini kapatması gerekir. Toplamayı bitirdiğinizde veya anlık görüntü aldığınızda rapor oluşturmak için, Koleksiyonu Durdur'ı seçin.
Veri toplama veya görüntüleme konusunda sorun yaşıyorsanız, Profil oluşturma hatalarını gidermeye ve sorunları düzeltmeye bakınız.
Bellek Kullanımı raporları
Veri toplamayı durdurduktan sonra, Bellek Kullanımı aracı uygulamayı durdurur ve Bellek Kullanımı genel bakış sayfasını görüntüler.
Bellek Kullanımı anlık görüntüleri
Anlık Görüntü bölmelerindeki sayılar, her anlık görüntü alındığında bellekteki nesneleri ve baytları ve anlık görüntü ile bir önceki arasındaki farkı gösterir.
Sayılar, yeni Visual Studio pencerelerinde ayrıntılı Bellek Kullanımı rapor görünümlerini açan bağlantılardır. anlık görüntü ayrıntıları raporu türleri ve örnekleri tek bir anlık görüntüde gösterir. anlık görüntü fark raporu iki anlık görüntüdeki türleri ve örnek durumları karşılaştırır.
C++ için Nesneleri (Fark) sütunu Ayırmaları (Fark)olarak adlandırılır.
Resim | Açıklama |
---|---|
![]() |
Anlık görüntü alındığında bellekteki toplam nesne sayısı. Türlerin örnekleri sayısına göre sıralanmış bir anlık görüntü ayrıntıları raporu görüntülemek için bu bağlantıyı seçin. |
![]() |
Bu anlık görüntüdeki toplam bellek nesnesi sayısı ile önceki anlık görüntü arasındaki fark. Türlerin toplam örnek sayısındaki farka göre sıralanmış bir anlık görüntü fark raporu görüntülemek için bu bağlantıyı seçin. |
![]() |
Anlık görüntü alındığında bellekteki toplam bayt sayısı. Tür örneklerinin toplam boyutuna göre sıralanmış bir anlık görüntü ayrıntıları raporu görüntülemek için bu bağlantıyı seçin. |
![]() |
Bu anlık görüntüdeki bellek nesnelerinin toplam boyutu ile önceki anlık görüntü arasındaki fark. Pozitif bir sayı, bu anlık görüntünün bellek boyutunun öncekinden büyük olduğu, negatif bir sayı ise boyutun daha küçük olduğu anlamına gelir. Temel, bir anlık görüntünün tanılama oturumundaki ilk anlık görüntü olduğunu belirtir. Fark Yok, farkın sıfır olduğu anlamına gelir. Tür örneklerinin toplam boyutundaki farka göre sıralanmış bir anlık görüntü fark raporu görüntülemek için bu bağlantıyı seçin. |
Resim | Açıklama |
---|---|
![]() |
Anlık görüntü alındığında bellekteki toplam bayt sayısı. Tür örneklerinin toplam boyutuna göre sıralanmış bir anlık görüntü ayrıntıları raporu görüntülemek için bu bağlantıyı seçin. |
![]() |
Anlık görüntü alındığında bellekteki toplam nesne sayısı. Türlerin örnekleri sayısına göre sıralanmış bir anlık görüntü ayrıntıları raporu görüntülemek için bu bağlantıyı seçin. |
![]() |
Bu anlık görüntüdeki bellek nesnelerinin toplam boyutu ile önceki anlık görüntü arasındaki fark. Pozitif bir sayı, bu anlık görüntünün bellek boyutunun öncekinden büyük olduğu, negatif bir sayı ise boyutun daha küçük olduğu anlamına gelir. Temel, anlık görüntünün tanılama oturumundaki ilk anlık görüntü olduğu anlamına gelir. Fark Yok, farkın sıfır olduğu anlamına gelir. Tür örneklerinin toplam boyutundaki farka göre sıralanmış bir anlık görüntü fark raporu görüntülemek için bu bağlantıyı seçin. |
![]() |
Bu anlık görüntüdeki toplam bellek nesnesi sayısı ile önceki anlık görüntü arasındaki fark. Anlık görüntü fark raporunu görüntülemek için bu bağlantıyı seçin. Türlerin toplam örnek sayısındaki farka göre sıralanır. |
Yönetilen tür raporları
Bellek Kullanımı özet tablosunda bir Nesneleri (Fark) hücresinin geçerli bağlantısını seçin.
Not
.NET kodu için, Örnekleri Görüntüle simgesi () yalnızca hata ayıklayıcıyla tümleşik Bellek Kullanımı aracını kullanırken veya yığın anlık görüntüsü açıp yönetilen bellekte hata ayıklama seçtiğinizde kullanılabilir.
Üst bölmede, tür tarafından referans alınan tüm nesnelerin boyutu da dahil olmak üzere anlık görüntüde bulunan türlerin sayısı ve boyutu gösterilir (Kapsayıcı Boyut).
Alt bölmedeki Kök'e Giden Yollar ağacı, üst bölmede seçilen türe başvuran nesneleri görüntüler. .NET çöp toplayıcısı, yalnızca ona başvuran son referans serbest bırakıldığında nesnenin belleğini temizler. Kök ağacına giden Yolları kullanma hakkında daha fazla bilgi için bkz. kök için sık erişimli yolu analiz etme.
Üst bölmede, anlık görüntüdeki türlerin sayısı ve boyutu ile tür tarafından referans verilen tüm nesnelerin boyutu da gösterilir (Kapsayıcı Boyut).
Alt bölmedeki Kök Ağacına Giden Yollar, üst bölmede seçilen türe atıfta bulunan nesneleri görüntüler. .NET çöp toplayıcısı, yalnızca onu referans eden son tür serbest bırakıldığında nesnenin belleğini temizler.
Referanslı Türler ağacı, üst bölmede seçilmiş tür tarafından tutulan referansları gösterir.
Başvurulan Türler ağacı, üst bölmede seçilen tür tarafından tutulan başvuruları görüntüler.
Rapor ağacı filtreleri
Uygulama geliştiricilerin bellek sorunlarını incelemesi için uygulamalardaki birçok tür gerekli değildir. Anlık görüntü raporu filtreleri, Yönetilen Bellek ve Kök Yolları ağaçlarında bu türlerin çoğunu gizleyebilir.
Bir ağacı tür adına göre filtrelemek için, Filtre kutusuna adı girin. Filtre büyük/küçük harfe duyarlı değildir ve tür adının herhangi bir bölümünde belirtilen dizeyi tanır.
Dış kod tarafından oluşturulan örneklerin çoğunu gizlemek için, Filtresi açılır listesinde Yalnızca Kodumu Göster seçeneğini seçin. Dış türler işletim sistemine veya çerçeve bileşenlerine aittir veya derleyici tarafından oluşturulur.
Boyutu (Bayt) toplam belleğin yüzde 0,5'inden az olan türleri gizlemek için Filtresi açılan menüsünde Küçük Nesneleri Daralt Daralt'ı seçin.
Yerleşik tür raporları
Tanılama Araçları penceresinin Bellek Kullanımı özet tablosunda bir Ayırmaları (Fark) veya Yığın Boyutu (Fark) hücresinin geçerli bağlantısını seçin.
Türleri Görünümü, anlık görüntüdeki türlerin sayısını ve boyutunu görüntüler.
Anlık görüntüde seçili türün nesneleri hakkındaki bilgileri görüntülemek için seçili türün yanındaki Örnekleri Görüntüle simgesini seçin.
Örnekleri 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. (Bu bilgiler yalnızca hata ayıklama sırasında kullanılabilir.)
Anlık görüntüde seçili türdeki nesneler hakkındaki bilgileri görüntülemek için seçili türdeki örnekler simgesini (
) seçin.
Örnekleri 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.
Seçilen türün ayırma yığınını görmek için Görünüm Modu listesinden Yığınlar Görünümü seçin.
Bellek Kullanımı İçgörüleri
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 İçgörüler sekmesini seçin; bu, Yinelenen dizeler, Seyrek dizilerve Olay işleyicisi sızıntılarıgibi geçerli otomatik içgörüleri gösterir.
Yinelenen Dizeler bölümü, yığında birden fazla kez tahsis edilen dizelerin listesini gösterir. Buna ek olarak, bu bölümde boşa harcanan toplam bellek, yani (örnek sayısı - 1) ile dize boyutunun çarpımı gösterilmektedir.
Seyrek Diziler bölümü, performans ve bellek kullanımı açısından verimsiz olabilecek, çoğunlukla sıfır öğeyle dolu dizileri gösterir. 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 yaşarsa, başka bir referans 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. Insights sekmesi, nesne grafında sahte yerel bellek düğümlerini gösterir. Bu düğümler, kullanıcı arabiriminin bunları tanıyacağı ve boyutlarını ve başvuru grafını görüntüleyeceği şekilde üst nesneleri tarafından korunur.
Raporları değiştirme (Fark)
Bellek Kullanımına genel bakış sayfasındaki Anlık Görüntü bölmesinin hücresindeki değişiklik bağlantısını seçin.
Yönetilen veya yerel raporun Karşılaştır listesinden bir anlık görüntü seçin.
Değişiklik raporu temel rapora temel anlık görüntü değeri ile karşılaştırma anlık görüntüsü arasındaki farkı gösteren sütunlar ((Fark)ile işaretlenmiş) ekler. Yerel Tür Görünümü fark raporu şöyle görünebilir:
Üst bölmede, anlık görüntüdeki türlerin sayısı ve boyutu gösterilir; bu, türün atıfta bulunduğu tüm nesnelerin boyutunu da içerir (Kapsayıcı Boyut).