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ı üzerindeki 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ülerini 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. Yayın ya da hata ayıklama derlemelerinde profil oluşturma araçlarını çalıştırma. gereksinimleriniz için en iyi bellek çözümleme aracını seçme hakkında bilgi için bkz. Bellek çözümleme aracı seçme.
bellek anlık görüntülerini Bellek Kullanımı aracında istediğiniz zaman 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.
Bu eğitimde öğrenecekleriniz:
- Belleğin anlık görüntülerini alma
- Bellek kullanım verilerini analiz etme
Bellek Kullanımı ihtiyacınız olan verileri vermezse, Performans Profili Oluşturucu 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şturucusu, çalışma zamanında ortaya çıkan etw olay verilerini ayırma 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ılan 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
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.
Bahşiş
Uygulamanız sık sık bellek ayırıp ardından bellek ayırmayı bıraktığı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 adım adım ilerleyin.
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.
Tanılama Araçları penceresi, siz kapatmadığınız sürece otomatik olarak görüntülenir. Pencereyi yeniden açmak için Hata Ayıklama>Windows>Tanılama Araçlarını Gösteröğesine tıklayın.
Araç çubuğundaki Araçları Seç ayarıyla Bellek Kullanımı seçin.
tanılama araçlarının ekran görüntüsü
tanılama araçlarının ekran görüntüsü
Hata Ayıklama / Hata Ayıklamayı Başlat (veya araç çubuğunda Başlat 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.
tanılama araçları özet sekmesinin ekran görüntüsü
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 seçin ve sonra yığın profil oluşturma seçin.
Durdur (Kısayol tuşu: Shift+F5) ve hata ayıklamayı yeniden başlatın.
tanılama araçları özet sekmesinin ekran görüntüsü
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 seçin ve sonra yığın profil oluşturma seçin.
Durdur (Kısayol tuşu: Shift+F5) ve hata ayıklamayı yeniden başlatın.
Hata ayıklamaya başlamak için, Bellek Kullanımı özet araç çubuğunda Anlık Görüntü Al seçeneğini seçin. (Burada bir kesme noktası ayarlamak da yardımcı olabilir.)
Bahşiş
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.
İlk durdurma noktanıza ulaşılmasını sağlayacak senaryoyu çalıştırın.
Hata ayıklayıcı ilk kesme noktasında duraklatıldığında, Bellek Kullanımı özet araç çubuğunda Anlık görüntü al seçeneğini seçin.
Uygulamayı ikinci kesme noktanızda çalıştırmak için F5 basın.
Ş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 profil oluşturma hatalarını giderme ve sorunları düzeltme bakın.
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.
Sütunun adı, proje özelliklerinde seçtiğiniz hata ayıklama moduna bağlıdır: .NET, yerel kod veya karma mod (hem .NET hem de yerel kod).
Nesneleri (Fark) (.NET) veya Ayırmaları (Fark) (C++) sütunu, anlık görüntü alındığında .NET veya 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österir.
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 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.
Bahşiş
Bellek sorunlarının daha hızlı tanımlanmasına 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 fazla artış gösteren 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ürler 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, anlık görüntüdeki türlerin sayısı ve boyutu gösterilir, bu sayıya türün başvuru yaptığı tüm nesnelerin boyutu da dahildir (Kapsayıcı Boyut).
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 en son onu referans veren tür 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, tür tarafından referans verilen tüm nesnelerin boyutu da dahil olmak üzere ekran görüntüsündeki türlerin sayısı ve boyutu gösterilir (Kapsayıcı Boyut).
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 Türler ağacı, üst bölmede seçilen tür tarafından tutulan başvuruları görüntüler.
Başvurulan Türler ağacı, üst bölmede seçilen tür tarafından tutulan referansları gösterir.
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 simgesine tıklayın.
Örnekleri 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 Nesneler yolları bölmesi, seçilen örneğe başvuran nesneleri ve seçilen örneğin başvurduğunu türleri görüntüler. Hata ayıklayıcısı anlık görüntünün alındığı noktada durdurulduğunda, nesnenin değerlerini bir ipucunda görüntülemek için Değer hücresinin üzerine gelebilirsiniz.
Örnekleri görünümü, üst bölmedeki anlık görüntüde seçili nesnenin örneklerini görüntüler. Kök yolları ve Referans Nesneler bölmesi, seçilen örneğe başvuran nesneleri ve seçilen örneğin başvurduğu türleri görüntüler. Anlık görüntünün alındığı noktada hata ayıklayıcı durduğunda, nesnenin değerlerini bir araç ipucu açılır penceresinde görüntülemek için Değer hücresinin üzerine gelerek inceleyebilirsiniz.
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 ve Yinelenen dizeler, Seyrek dizilerve Olay işleyici sızıntılarıgibi geçerli otomatik içgörüleri gösterir.
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, yani (örnek sayısı - 1) çarpı dize boyutu, gösterilir.
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 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. 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.
Değişiklik (Diff) raporları
Tanılama Araçları penceresindeki Bellek Kullanımı sekmesinin özet tablosunun 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ü farklılık raporu işte böyle görünebilir:
Üst panel, tür tarafından referans verilen tüm nesnelerin boyutu da dahil olmak üzere, anlık görüntüde yer alan türlerin sayısı ve boyutunu gösterir (Kapsayıcı Boyut).
Bloglar ve videolar
Hata Ayıklarken CPU ve Belleği Analiz Etme
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şturucu turunu tamamladıysanız, profil oluşturma araçlarını kullanarak kodu iyileştirmeye yönelik genel bir yaklaşım hakkında bilgi edinmek isteyebilirsiniz.
Örnek olay incelemesi: Kod iyileştirmeye yönelik başlangıç kılavuzu
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.
Performans Profili Oluşturucu bellek kullanımını analiz etme