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
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).
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 Windows>Tanılama Araçlarını Göster hatalarını ayıkla'ya>tıklayın.
Araç çubuğundaki Araçları Seç ayarıyla Bellek Kullanımı'nı seçin.
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.
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.
Hata ayıklamayı durdurun (Kısayol tuşu: Shift+F5) ve yeniden başlatın.
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.
Hata ayıklamayı durdurun (Kısayol tuşu: Shift+F5) ve yeniden başlatın.
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.)
İ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.
İlk kesme noktanıza isabet edilmesine neden olacak senaryoyu çalıştırın.
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.
Uygulamayı ikinci kesme noktanızda çalıştırmak için F5 tuşuna 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 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.
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 () 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.
Ü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.
Başvurulan Türler ağacı, üst bölmede seçilen tür tarafından tutulan başvuruları görüntüler.
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.
Ö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.
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 () 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.
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.
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.
Seçili türün ayırma yığınını görmek için Yığınlar'ı seçin.
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.
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.
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.
Yönetilen veya yerel raporun Karşılaştır listesinden bir anlık görüntü seçin.
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:
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.