Ako identifikovať pamäte netesnosti v spoločný jazykový modul runtime

Preklady článku Preklady článku
ID článku: 318263 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

SUHRN

Tento článok sa zaoberá, aké pretekaním pamäte sú a zoznamy niektoré možné príčiny pretekaním pamäte. Navyše, tento článok sa zaoberá vnímané memory leak a ako ju možno interpretovať ako pravda memory leak.

DALSIE INFORMACIE

Pretekaním pamäte môže spôsobiť na spustenie z aplikácie zdroje a môžu spôsobiť žiadosť sa zrúti. Je dôležité identifikovať memory leaks. Problém s pretekaním pamäte sužovala vývojári v c a c ++ pre roky. V programe Microsoft Visual Studio 2005 alebo Microsoft Visual Studio.NET, komplexné odpadky kolekcia balík a spravovaných pamäte môže zastaviť pretekaním pamäte, ale podľa niektorých okolností, program môže zdajú byť unikajúcimi pamäte.

Definícia pretekanie pamäte

Memory leak dôjde keď pamäte, prideľovaná v programe a je nikdy sa vrátil do operačného systému, hoci program nepoužíva pamäť dlhšie. Nasledujú štyri základné typy pretekaním pamäte:
  • V prostredí manuálne spravovaných pamäte: pamäť je dynamicky pridelené a odkazuje ukazovateľa. Ukazovateľ vymažú pred uvoľniť pamäť. Po ukazovateľ vymažú, pamäť už nemôže byť prístupné a preto nemôže byť oslobodený.
  • V prostredí dynamicky spravovaných pamäte: pamäť je likvidovať ale nikdy nevyzbierali, pretože odkaz na objekt je stále aktívne. Pretože odkaz na objekt je stále aktívne, odpadky zberača nikdy zhromažďuje že pamäť. Tento problém môže nastať s odkazom, ktorý je nastaviť systém alebo program.
  • V prostredí dynamicky spravovaných pamäte: odpadky zberača môže zhromažďovať a voľného pamäť ale nikdy vráti ju prevádzkových systém. Nastane vtedy, ak odpadky zberača nemôžete presunúť objekty, ktoré sú stále v použiť na jednu časť pamäte a bez zvyšok.
  • V každom prostredí, pamäť: správa chudobných pamäte môžete výsledok pri mnohých veľké objekty sú deklarované a nikdy povolené opustiť rozsahu. V dôsledku toho pamäte je používať a nikdy uvoľnený.

Diskusie

Z dôvodu odpadky zber balík, ktorý je implementovaný v Microsoft.NET Framework, nie je možné mať pretekanie pamäte v spravovaný kód. Toto naznačuje dve otázky: ako potom môže vyskytnúť pretečenie pamäte? Prečo sa javilo, že máte pretečenie pamäte?

Pretečenie pamäte môžete vyskytnúť.NET Framework žiadosti, ak použijete nespravovaná kód ako súčasť uplatňovanie. Tento nespravovaná kód môže unikať pamäte, a.NET Framework runtime nemôže riešiť tento problém.

Navyše projekt môže len sa zdajú mať pretečenie pamäte. Táto podmienka sa môže vyskytnúť pri mnohých veľkých objekty (ako napríklad DataTable objekty) sú deklarované a potom pridá do kolekcie (ako napríklad Množina údajov). Zdroje, ktoré tieto objekty vlastné nikdy uvoľnené, a zdroje sú ponechané nažive pre celé spustenie programu. Sa zdá, že byť úniku, ale vlastne je len príznakom tak, že pamäť je pridelené v programe.

Môžete mať napríklad Množina údajov. Zakaždým, že nový dotaz spustiť, pridanie nového DataTable prvok, ktorý Množina údajov držať vrátený údaj. Ak existujú veľké množstvá údajov, ktoré ste nikdy nelikvidujte, údaje zostane nažive tak dlho, ako Množina údajov je stále v použitia. Ak nastane táto situácia dost krát, je možné spustiť pamäte. To nie je pretečenie pamäte, ale namiesto toho je to problém v spravovanie pamäte. Pozri nasledujúci príklad kód:
  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
				
Poznámka Tento príklad je len úryvku kódu. Tento príklad predpokladá že Microsoft SQL Server je nainštalovaný na lokálny počítač a že používateľa kto je spustený tento kód má prístup k Northwind databáza, ktorá je súčasťou servera SQL Server.

Hoci Tento kód je samozrejme neefektívne a nie praktických, je určený na preukázať, že ak objekty sa pridávajú na kolekciu (napríklad pridať Tabuľka Množina údajov zber), objekty sú držané aktívne tak dlho, ako Kolekcia je stále nažive. Ak kolekcia je deklarovaná na globálnej úrovni program a objekty sú deklarované v rámci celého programu a pridali k zber, to znamená, že hoci objekty už nie sú v pôsobnosti, objekty zostať nažive, pretože sú sa stále odkazuje.

Každý čas, ktorý nastane táto situácia, množstvo pamäte, ktoré používa program zvyšuje. Pamäť sa nezmenší do konca program alebo uvoľnenie objekty z kolekcie. Keď budete sledovať program na Sledovanie výkonu, sa javí ako pretečenie pamäte, ale nie je. The program stále má kontrolu nad pamäte, ale rozhodol nie ho uvoľnite. The skutočnosť, že program stále má kontrolu zabraňuje to je pretečenie pamäte ale skutočnosť, že program neustále zvyšuje veľkosť pamäte používané môžete aby sa zdajú byť pretečenie pamäte.

Príznaky pretekanie pamäte

Ak množstvo pamäte, ktoré používa program naďalej zvýšenie počas výkonu, to je symptómom pretečenie pamäte. (Môžete Sledujte tento počet pamäte pomocou sledovanie výkonu.) Veľkosť pamäte program používa môže nakoniec spôsobí spustenie zo zdrojov programu a sa zrúti.

ODKAZY

Toto je zoznam tém Pomocníka pre ďalšie informácie o pamäte a jeho riadenie:
  • GC triedy
  • Počítadlá výkonu pamäte
  • Automatická správa pamäte
  • Spoluprácu s nespravovaná kód
Ďalšie informácie získate po kliknutí na nasledovné číslo článku databázy Microsoft Knowledge Base:
317297Cestovná mapa pre ladenie zablokuje, pretekaním pamäte, uviaznutiu a rasy podmienky v jazyku Visual Basic.NET
Pre viac informácií navštívte nasledujúce Microsoft Developer Network (MSDN) webových lokalít:
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

Vlastnosti

ID článku: 318263 - Posledná kontrola: 8. novembra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • 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
Kľúčové slová: 
kbvs2005swept kbvs2005applies kbinfo kbmt KB318263 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:318263

Odošlite odozvu

 

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