Ortak dil çalışma zamanı bellek belirleme sızdırıyor

Makale çevirileri Makale çevirileri
Makale numarası: 318263 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu makalede, hangi bir bellek sızıntısı olduğu anlatılır ve Bellek sızıntılarını bazı olası nedenleri listeler. Ayrıca, algılanan bir bellek sızıntısı ve nasıl, doğru bellek sızıntısı gibi misinterpreted bu makalede anlatılmaktadır.

Daha fazla bilgi

Bellek sızıntıları uygulama kaynakları yetersiz çalışmasına neden olabilir ve bir uygulamanın kilitlenmesine neden olabilir. Bellek sızıntılarını belirlemek önemlidir. Bellek sızıntısı sorununu C ve C++ geliştiricileri, yıllara ait plagued. Microsoft Visual Studio 2005 veya Microsoft Visual Studio. NET'te bir kapsamlı bir atık toplama paketi ve yönetilen belleği, bellek sızıntıları durdurabilirsiniz, ancak bazı durumlarda, bellek sızıntı için bir program olarak görünebilir.

Bellek sızıntısı tanımı

Bellek bir programda ayrılır ve işletim sistemi tarafından döndürülen hiçbir zaman rağmen program bellek artık kullanmayan BIR bellek sızıntısı oluşur. Bellek sızıntıları dört temel türleri şunlardır:
  • Bir <a0>el ile yönetilen bellek</a0> ortamında: bellek dinamik olarak ayrılan ve bir işaretçi başvuruyor. Işaretçiyi, bellek serbest önce silinir. Işaretçiyi silindikten sonra bellek artık erişilebilir ve bu nedenle serbest bırakılamıyor.
  • Bir <a0>dinamik olarak yönetilen bellek</a0> ortamında: bellek aktiften ancak nesnesine bir başvuru hala etkin olduğundan hiçbir zaman, toplanan. Çöp toplayıcısını, hiçbir zaman nesnesine bir başvuru hala etkin olduğundan, bu bellek toplar. Bu, sistem veya program tarafından ayarlanmış bir başvurusu olan oluşabilir.
  • Bir <a0>dinamik olarak yönetilen bellek</a0> ortamında: çöp toplayıcısını toplayabilir ve boş bellek ancak hiçbir, işletim sistemine verir. Bu durum yine de bulunan nesneler için belleğin bir bölümünü kullanma ve kalan boş çöp toplayıcısını taşıyamıyor oluşur.
  • Tüm <a0>bellek</a0> ortamında: düşük bellek yönetimi, birçok büyük nesne bildirilen ve kapsam bırakmak için hiçbir zaman izin neden olabilir. Sonuç olarak, bellek kullanılan ve hiçbir zaman serbest.

Tartışma

Microsoft .NET Framework'de uygulanan çöp toplama paketi nedeniyle, yönetilen kod bir bellek sızıntısı mümkün değildir. Bu iki soruyu önerir: nasıl sonra bellek sızıntısı oluşabilir? Neden bir bellek sızıntısı var görünmüyor?

Uygulamanın bir parçası yönetilmeyen kod kullandığınızda bellek sızıntısı bir .NET Framework uygulamasında oluşabilir. Bu yönetilmeyen kod, .NET Framework ve bellek sızdırıyor çalıştırma modülünün bu sorunla edemiyor.

Ayrıca, proje, yalnızca bir bellek sızıntısı için görüntülenebilir. (Örneğin, DataTable nesneleri) çok büyük nesneler bildirilen ve koleksiyonu (örneğin, bir DataSet) eklenen bu durum oluşabilir. Bu nesnelerin sahibi kaynakları hiçbir zaman yayımlanacak ve tüm program çalışan için kaynakları Canlı kalır. Bu bir sızıntısı gibi görünüyor, ancak gerçekte yalnızca bir belirtisi, bellek programa ayrılmış şekilde olacaktır.

Örneğin, bir DataSet var. Yeni bir sorgu çalıştırdığınızda, her zaman döndürülen veriyi tutmak için bu DataSet için yeni bir DataTable öğesi ekleyin. Büyük tutarları, hiçbir zaman atma veri varsa, DataSet'in hala kullanımda olarak verilerin canlı olarak kalır. Yeterli bir kez oluşursa, yetersiz bellek olasıdır. Bu bellek sızıntısı değildir, ancak bunun yerine, bellek yönetimi, bir sorundur. Aşağıdaki kod örneği Bkz:
  Dim DS As DataSet
  Dim cn As New SqlClient.SqlConnection("data source=localhost;initial catalog=Northwind;integrated security=SSPI")
  cn.Open()
 
  Dim da As New SqlClient.SqlDataAdapter("Select * from Employees", cn)
  Dim i As Integer
  DS = New DataSet()

  For i = 0 To 1000
      da.Fill(DS, "Table" + i.ToString)
  Next
				
Not bu örnekte, yalnızca bir kod parçacığı olan. Bu örnek Microsoft SQL Server'ın yerel bilgisayarda yüklü olduğunu ve bu kodu kullanan kullanıcı SQL Server'ın içerdiği Northwind veritabanına erişimi olduğunu varsayar.

Bu kod açıktır verimsiz ve değil kullanışlı olsa da, nesneleri koleksiyonu (örneğin, tablolar, DataSet derlemesine ekleyerek) eklenirse, koleksiyon Canlı kaldığı sürece nesneleri etkin tutulur olduğunu göstermek için tasarlanmıştır. Bunlar hala başvurulan için bir program Genel düzeyde bildirilir ve nesneler tüm programa bildirilir ve nesneler artık kapsamda olsa tahsilat, yani, eklenen, nesneleri canlı olarak kalır.

Bu oluşur, her zaman program artar kullandığı bellek miktarı. Bellek sonuna kadar program veya nesnelerin sürümünden koleksiyon kadar azaltamaz. Bir performans izleyicisi programı izlemek için bu bellek sızıntısı gibi görünüyor, ancak bu. Program hala bellek üzerinde denetimi yoktur ancak onu serbest seçti. Program denetim hala olduğu gerçeğini bu bellek sızıntısı engeller, ancak program kullanılan bellek miktarını artırmayı tutar gerçeğini bellek sızıntısı gibi görünmesini sağlayabilirsiniz.

Bellek sızıntısı belirtileri

Yürütme sırasında artırmak bir program kullanmak bellek miktarını devam eder, bu bellek sızıntısı belirtisi olur. (Bu sayı bir performans izleyicisi ile bellek izleyebilir.) Programın kullandığı bellek miktarı zaman içinde kaynakları yetersiz ve kilitlenme çalıştırılacak programın neden olabilir.

Referanslar

Bellek ve kendi yönetimi hakkında daha fazla bilgi için Yardım konuları listesi aşağıdadır:
  • GC sınıfı
  • Bellek Performansı sayaçları
  • Otomatik bellek yönetimi
  • Yönetilmeyen kod ile birlikte çalışma
Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
317297Bu bağlantı, bir kısmı veya tamamı ingilizce olan içeriğe işaret edebilir. bellek sızıntısı, kilitlenme ve Visual Basic. NET'te yarış durumları, hata ayıklama için yol haritası
Daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitelerini ziyaret edin:
http://msdn.microsoft.com/en-us/library/x98tx3cf.aspx

http://msdn.microsoft.com/en-us/library/fz5w87ad.aspx

http://msdn.microsoft.com/en-us/library/kxx6e7z6.aspx

http://msdn.microsoft.com/en-us/library/s3aw423e.aspx

Özellikler

Makale numarası: 318263 - Last Review: 6 Aralık 2006 Çarşamba - Gözden geçirme: 4.7
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Common Language Runtime (included with the .NET Framework) 1.0
  • Microsoft Common Language Runtime (included with the .NET Framework 1.1)
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional
  • Microsoft Visual Studio .NET 2003 Professional Edition
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Academic Edition
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft Visual Studio .NET 2002 Enterprise Architect
  • Microsoft Visual Studio .NET 2002 Enterprise Developer
  • Microsoft Visual Studio .NET 2002 Academic Edition
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual J# .NET 2003 Standard Edition
Anahtar Kelimeler: 
kbmt kbvs2005swept kbvs2005applies kbinfo KB318263 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:318263

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com