.NET Framework bellek sorunlarını çözümleme

Visual Studio tarafından yönetilen bellek çözümleyicisini kullanarak .NET Framework kodu içindeki bellek sızıntılarını ve verimsiz bellek kullanımını bulun.Minimum .NET Framework hedef kod .NET Framework 4.5 sürümüdür.Seçeneği yalnızca döküm Özet sayfasından Visual Studio 2013 Ultimate sürümünde kullanılabilir olur.Premium veya Professional kullanıyorsanız, seçeneği görmezsiniz.

Bellek çözümleme aracı, bir uygulamanın belleğindeki nesnelerin bir kopyasını içeren yığın verisine sahip döküm dosyaları içindeki bilgileri analiz eder.Döküm (.dmp) dosyalarını Visual Studio IDE'den veya diğer sistem araçlarını kullanarak toplayabilirsiniz.

  • Nesne türlerinin bellek kullanımı üzerindeki göreli etkisini anlamak ve uygulamanızda belleği verimsiz kullanan kodu bulmak için tek bir anlık görüntüyü anailz edebilirsiniz.

  • Ayrıca, zaman içinde artırmak bellek kullanımını neden (fark) iki anlık görüntüsü alanlar kodunuzda bulmak için bir uygulama karşılaştırın.

Yönetilen bellek Çözümleyicisi anlatım için bkz üretim ortamında .NET bellek sorunları tanılamak için Visual Studio 2013 kullanarak Visual Studio ALM + Team Foundation Server Web günlüğü üzerinde.

İçindekiler

Memory use in .NET Framework apps

Bir uygulamada bir bellek sorunu tanımlama

Bellek anlık görüntüleri toplama

Bellek kullanımını analiz etme

Memory use in .NET Framework apps

.NET Framework, atık toplama yapılan bir çalışma zamanıdır, böylelikle çoğu uygulamada bellek kullanımı bir sorun değildir.Ancak web servisleri ve uygulamaları gibi uzun süre çalışan uygulamalarda ve sınırlı miktarda belleğe sahip aygıtlarda, bellekte nesnelerin birikmesi, uygulamanın ve üzerinde çalıştığı aygıtın performansını etkileyebilir.Atık toplayıcı çok sık çalışıyorsa veya işletim sistemi, RAM ve disk arasında bellek taşımak zorunda kalıyorsa, aşırı bellek kullanımı, uygulamaya veya makineye yeterli kaynak kalmamasına neden olabilir.En kötü durumda, bir uygulama bir "Yetersiz bellek" özel durumuyla çökebilir.

.NET yönetilen yığını, bir uygulama tarafından oluşturulan başvuru nesnelerinin depolandığı bir sanal bellek bölgesidir.Nesnelerin kullanım ömrü atık toplayıcı (GC) tarafından yönetilir.Atık toplayıcı, bellek bloklarını kaplayan nesneleri izlemek için başvurular kullanır.Bir başvuru, bir nesne oluşturulduğunda ve bir değişkene atandığında oluşturulur.Tek bir nesne birden çok başvuruya sahip olabilir.Örneğin, nesneyi bir sınıfa, koleksiyona ve başka veri yapısına ekleyerek veya nesneyi ikinci bir değişkene atayarak ek başvurular oluşturulabilir.Bir başvuru oluşturmanın daha az belirgin bir yolu, bir nesnenin, başka bir nesnenin olayına bir işleyici eklemesidir.Bu durumda, işleyici açıkça kaldırılana veya ikinci nesne yok edilene kadar ikinci nesne ilk nesnenin başvurusunu tutar.

Her uygulama için, atık toplayıcı, uygulama tarafından başvurulan nesneleri izleyen bir başvuru ağacı tutar.Başvuru ağacı, global ve statik nesnelere ek olarak ilgili iş parçacığı yığınlarını ve dinamik olarak örneklenen nesneleri içeren bir kök kümesine sahiptir.Ona başvurusu olan en az bir üst nesneye sahipse bir nesnenin kökü belirtilir.Atık toplayıcı, yalnızca uygulamada başka hiçbir nesnenin veya değişkenin başvurmadığı bir nesnenin belleğini geri kazanabilir.

Başa dönİçindekiler

Bir uygulamada bir bellek sorunu tanımlama

Bellek sorunlarının en çok görünen belirtisi uygulamanızın performansıdır, özellikle performans zamanla düşüyorsa.Uygulamanız çalışırken diğer uygulamaların performansının düşmesi de bir bellek sorunu olduğunu belirtebilir.Bellek sorununu şüpheleniyorsanız, bir araç gibi Görev Yöneticisi'ni kullanın veya Windows Performans İzleyicisi daha fazla araştırmak için.Örneğin, toplam bellek büyüklüğünde, olası bellek sızıntılarının kaynağı olarak açıklayamadığınız bir artış olup olmadığına bakın:

Kaynak İzleyicisi tutarlı bellek büyüme

Ayrıca, bir yordamda verimsiz bellek kullanımına işaret edecek şekilde, kodun önereceğini beklediğiniz miktarı aşan anlık bellek artışlarına bakın:

Bellek ani Kaynak Yöneticisi'nde

Bellek anlık görüntüleri toplama

Bellek analizi aracı, yığın bilgisi içeren döküm dosyalarındaki bilgileri analiz eder.Visual Studio'da döküm dosyalarını oluşturabilir veya gibi bir araç kullanabileceğiniz ProcDump öğesinden Windows Sysinternals.Bakın bir döküm nedir ve bir nasıl oluşturabilirim? Visual Studio hata ayıklayıcısını ekip blogunda.

[!NOT]

Çoğu araç, döküm bilgisini, tam yığın belleği verilerini içerecek veya içermeyecek şekilde toplayabilir.Visual Studio bellek çözümleyicisi tam yığın bilgisi gerektirir.

Visual Studio'dan bir döküm toplamak için

  1. Visual Studio projesinden başlatılan bir işlem için bir döküm dosyası oluşturabilirsiniz, veya hata ayıklayıcıyı çalışan bir işleme ekleyebilirsiniz.Bakın Visual Studio Hata Ayıklayıcısı ile Çalıştırma İşlemleri İliştirme.

  2. Yürütmeyi durdurun.Hata ayıklayıcı, Hata Ayıklama menüsünde Tümünü Kes seçeneğini belirlediğinizde, bir özel durumda veya bir kesme noktasında durur.

  3. Hata Ayıklama menüsünde, Dökümü Farklı Kaydet seçin.Dökümü Farklı Kaydet iletişim kutusunda, bir konum belirtin ve Farklı kaydetme türü listesinde Yığın ile mini döküm (varsayılan) seçili olduğundan emin olun.

İki bellek anlık görüntüsünü karşılaştırmak için

Bir uygulamanın bellek kullanımındaki artışı analiz etmek için, uygulamanın tek bir örneğinden iki döküm dosyası toplayın.

Başa dönİçindekiler

Bellek kullanımını analiz etme

Nesne listesini filtreleme | Tek bir anlık görüntüden bellek verileri analiz etme | İki bellek anlık görüntüsünü karşılaştırma

Bellek kullanımı sorunları için bir döküm dosyasını analiz etmek amacıyla:

  1. Visual Studio'da, Dosya, seçeneğini belirleyin ve döküm dosyasını belirtin.

  2. Mini Döküm Dosya Özeti sayfasında, Yönetilen Bellekte Hata Ayıkla seçin.

    Dosya Özet sayfası dökümü

Bellek çözümleyicisi, dosyayı analiz etmek için bir hata ayıklama oturumu başlatır ve sonuçları Yığın Görünümü sayfasında görüntüler:

Başa dönİçindekiler

Nesne listesini filtreleme

Varsayılan olarak, bellek çözümleyicisi, bir bellek anlık görüntüsündeki nesne listesini yalnızca kullanıcı kodundaki türleri ve örnekleri gösterecek şekilde ve yalnızca toplam kapsamalı boyutu toplam yığın boyutunun bir eşik yüzdesini geçen türleri gösterecek şekilde filtreler.Bu seçenekleri Görünüm Ayarları listesinde değiştirebilirsiniz:

Sadece kendi kodumu etkinleştir

Yalnızca Kendi Kodum, en genel sistem nesnelerini gizler, böylelikle listede yalnızca sizin oluşturduğunuz türler görüntülenir.

Yalnızca Kendi Kodum seçeneğini, Visual Studio Seçenekler iletişim kutusunda da ayarlayabilirsiniz.Üzerinde hata ayıklama menüsünde seçin seçenekleri ve ayarları.Hata Ayıklama/Genel sekmesinde, Yalnızca Kendi Kodum seçeneğini belirleyin veya temizleyin.

Küçük Nesneleri Daralt

Küçük Nesneleri Daralt seçeneği, toplam kapsamlı boyutu toplam yığın boyutunun yüzde 0,5'inden daha küçük olan tüm türleri gizler.

Tür listesini ayrıca, Arama kutusuna bir dize girerek de filtreleyebilirsiniz.Listede yalnızca, adları dizeyi içeren türler görüntülenir.

Başa dönİçindekiler

Tek bir anlık görüntüden bellek verileri analiz etme

Visual Studio dosya analiz etmek için yeni bir hata ayıklama oturumunu başlatır ve bir yığın görünüm penceresine bellek verilerini görüntüler.

Nesne türü listesi

Başa dönİçindekiler

Nesne türü tablosu

Üstteki tabloda, bellekte tutulan nesne türleri listelenir.

  • Sayısı anlık türün örneklerinin sayısını gösterir.

  • Boyutu (bayt) türü başvurular tutan nesnenin boyutunu hariç, tüm örneklerini boyutu.Bu

  • Dahil boyutu (bayt) boyutları başvurulan nesneleri içerir.

Örnekleri simge seçebileceğiniz (Nesne Türü sütununda örneği simgesi) içinde nesne türü türü örnekleri listesini görüntülemek üzere sütun.

Örnek tablo

Örnekleri tablosu

  • Örneği nesnenin nesne tanımlayıcısı görevini gören nesnenin bellek konumu

  • Değeri değer türleri gerçek değerini gösterir.Veri değerlerini bir veri ipucunda görüntülemek için bir başvuru türü adının üzerine getirin.

    Örnek değerlerini bir veri ipucunda

  • Boyutu (bayt) başvurular tutan nesnenin boyutunu hariç nesnenin boyutu.Bu

  • Dahil boyutu (bayt) boyutları başvurulan nesneleri içerir.

Varsayılan olarak, türler ve örnekler Kapsamlı Boyut (Bayt) değerine göre sıralanır.Sıralama düzenini değiştirmek için listede bir sütun başlığı seçin.

Kök Yolları

  • Seçildiği bir tür için nesne türü tablo, kök yolları tablo bu sağlama kök nesneler üzerinde hiyerarşide olan tür referansı sayısı ile birlikte türdeki tüm nesneleri için benzersiz türü hiyerarşileri gösterir.

  • Bir türün örneğinden seçilen nesne için kök yolları örnek bir başvuru tutmak asıl nesnelerin bir grafik gösterir.Veri değerlerini bir veri ipucunda görüntülemek için nesnenin adı üzerine.

Başvurulan türleri / nesneler başvuruda

  • Seçildiği bir tür için nesne türü tablo, başvurulan türleri sekmesi boyutunu ve seçilen türdeki tüm nesneler tarafından kullanılan başvurulan türleri sayısını gösterir.

  • Bir türün seçili bir örnek için başvurulan nesneler seçili örneği tarafından kullanılan nesnelerini gösterir.Veri değerlerini bir veri ipucunda görüntülemek için adın üzerine getirin.

Döngüsel başvurular

Bir nesne, ilk nesneye doğrudan veya dolaylı olarak bir başvuru tutan ikinci bir nesneye başvurabilir.Bellek çözümleyicisi bu durumla karşılaştığında, başvuru yolunu genişletmeyi durdurur ve ilk nesnenin listesine bir [Döngü Algılandı] ek açıklaması ekler ve durur.

Kök türleri

Bellek çözümleyicisi, kök nesnelerine, tutulmakta olan başvuru türünü açıklayan ek açıklamalar ekler:

Ek Açıklama

Açıklama

Statik değişkenVariableName

Bir statik değişken.VariableName, değişkenin adıdır.

Sonlandırma İşleyicisi

Sonlandırma sırasından bir başvuru.

Yerel Değişken

Yerel bir değişken.

Güçlü İşleyici

Nesne işleyicisi tablosundan bir güçlü başvuruya işleyici.

Zaman uyumsuz. Sabitlenmiş İşleyici

Nesne işleyicisi tablosundan bir zaman uyumsuz sabitlenmiş nesne.

Bağımlı İşleyici

Nesne işleyicisi tablosundan bir bağımlı nesne.

Sabitlenmiş İşleyici

Nesne işleyicisi tablosundan bir sabitlenmiş güçlü başvuru.

RefCount İşleyicisi

Nesne işleyicisi tablosundan bir başvurusu sayılan nesne.

SizedRef İşleyicisi

Atık toplama zamanında tüm nesnelerin ve nesne köklerinin toplu kapanışının yaklaşık boyutunu tutan bir güçlü işleyici.

Sabitlenmiş yerel değişken

Sabitlenmiş bir yerel değişken.

İki bellek anlık görüntüsünü karşılaştırma

Bellek sızıntılarının kaynağı olabilecek nesneler bulmak üzere bir işlemin iki döküm dosyasını karşılaştırabilirsiniz.İlk (önceki) ve ikinci (sonraki) dosyanın toplanması arasındaki aralık, sızan nesne sayısı artışı kolayca görülebilecek kadar büyük olmalıdır.İki dosyayı karşılaştırmak için:

  1. İkinci döküm dosyasını açın ve ardındanMini Döküm Dosya Özeti sayfasında Yönetilen Bellekte Hata Ayıkla seçin.

  2. Bellek analizi raporu sayfasında, Taban çizgisi seçin listesini açın ve ardından Gözat seçerek ilk döküm dosyasını belirtin.

Çözümleyici, raporun üst bölmesine, türlerin Sayı, Boyut ve Kapsamlı Boyut değerleriyle önceki anlık görüntüdeki değerler arasındaki farkları gösteren sütunlar ekler.

Tür listesinde fark sütunları

Kök Yolları tablosuna bir Başvuru Sayısı Farkı sütunu da eklenir.

Başa dönİçindekiler

Ayrıca bkz.

Diğer Kaynaklar

VS ALM TFS Blog: .NET bellek üretim sorunlarını tanılamak için Visual Studio 2013 kullanarak

kanal 9 | Visual Studio TV | Yönetilen bellek çözümlemesi

kanal 9 | Visual Studio araç kutusu | Yönetilen bellek çözümlemesi Visual Studio 2013'teki