Jak určit paměť nevrací do společného jazykového modulu runtime.

Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.

Projděte si také anglickou verzi článku:318263
Souhrn
Tento článek popisuje některé jaké jsou nevracení paměti a seznamy možné příčiny nevrácené paměti. Kromě toho tento článek popisuje nevracení paměti zjištěné a jak, jej může být chybně interpretováno jako nevracení paměti na hodnotu true.
Další informace
Nevracení paměti může způsobit spuštění z aplikace prostředky a může způsobit selhání aplikace. Je důležité identifikovat nevracení paměti. Problém nevracení paměti má plagued vývojáři v c a C++ pro roky. V aplikaci Microsoft Visual Studio 2005 nebo Microsoft Visual Studio.NET, komplexní úklid balíček a spravované paměti můžete zastavit nevracení paměti, ale podle některých okolnosti, program může zobrazit nevrací paměť.

Definice nevracení paměti

Nevracení paměti dochází paměť je přiděleno v programu a je nikdy vrácena do operačního systému, přestože program nepoužívá. paměť již. Čtyři základní typy nevrácené paměti jsou následující:
  • V prostředí ručně spravované paměť: paměť Dynamicky přidělený a odkazuje na ukazatel. Ukazatel je vymazán před paměť je uvolněna. Po ukazatel vymazána, již nebude paměť přístup a proto nemůže být uvolněna.
  • V prostředí dynamicky spravované paměť: paměť odbyt ale nikdy shromážděny, protože odkaz na objekt stále aktivní. Protože je stále aktivní odkaz na objekt souhrnu kolekcí nikdy shromažďuje, že paměť. Tato situace může nastat s odkazem, který je Nastavte systém nebo program.
  • V prostředí dynamicky spravované paměti: úklid kolekcí můžete shromažďovat a zdarma paměti nikdy však vrací ji operačního systém. V případě, že nesmyslné kolekcí nelze přesunout objekty, které jsou stále v jedné části paměti pomocí a zbývající volné.
  • V jakémkoli prostředí paměti: Správa špatné paměti lze Výsledkem mnoha velké objekty jsou deklarovány a nikdy povoleno opustit oboru. Následkem toho paměti používá a nikdy uvolněna.

Diskuse

Z důvodu balíček sběr odpadků, který je prováděn v Microsoft.NET Framework, není možné k nevrácení paměti spravovaný kód. To naznačuje dvě otázky: jak potom může dojít k nevrácení paměti? Proč ji se, že máte nevracení paměti?

Nevracení paměti lze dojít v.NET Framework aplikace, použijete-li jako součást nespravovaný kód aplikace. Tento nespravovaný kód může způsobit únik paměti a.NET Framework Runtime nelze řešení tohoto problému.

Kromě toho může projekt Zobrazí se pouze k nevracení paměti. Tato situace může nastat, pokud je mnoho velkých objekty (např. Objekt DataTable objekty) jsou deklarovány a pak přidán do kolekce (například Objekt DataSet). Prostředky, které tyto objekty vlastní nikdy být uvolněny, a prostředky jsou ponechány alive pro celé spuštění programu. Zobrazí se na být nevracení, ale ve skutečnosti se jedná pouze příznaku tak, že paměť je přidělené v programu.

Máte například Objekt DataSet. Při každém spuštění nového dotazu přidáte nový Objekt DataTable prvek Objekt DataSet pro uložení dat, která je vrácena. Pokud existuje velké množství data, která nikdy vyřazení, data zůstala naživu tak dlouho, dokud Objekt DataSet je stále používán. V takovém případě dostatek času je možné dostatek paměti. Toto není nevracení paměti, ale místo toho je problém v Správa paměti. Viz následující příklad kódu:
  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 příklad je pouze výstřižek kódu. Tento příklad předpokládá Tento Microsoft SQL Server je nainstalována na místním počítači a že uživatel kdo je spuštěn tento kód má přístup Northwind databáze, která je součástí serveru SQL Server.

Přestože Tento kód je zjevně neefektivní a není praktické, měl by prokázat, že pokud jsou objekty přidané do kolekce (například přidání tabulky Objekt DataSet Kolekce) jsou uloženy objekty aktivní tak dlouho, dokud kolekce zůstane naživu. Pokud kolekce je deklarována na globální úrovni deklarované v celém programu a připojí k programu a objekty kolekce, to znamená, že přestože objekty jsou již v oboru, objekty zůstanou naživu, protože tyto jsou stále odkazuje.

Každý čas, který v takovém množství paměti, který program používá. zvyšuje. Paměť až na konci programu poklesu nebo uvolnění objektů z kolekce. Při sledování programu na Sledování výkonu pravděpodobně nevracení paměti, ale není. Na program stále má kontrolu nad paměti, ale nebylo možné ji vydat. Na skutečnost, že program má ovládací prvek stále brání toto nevracení paměti Avšak skutečnost, že program zaznamenává zvýšení paměti používané lze v něm se zdají být nevracení paměti.

Příznaky nevracení paměti

Pokud velikost paměti, která používá program pokračuje zvýšení během provádění, je to a příznak nevracení paměti. (Můžete sledujte počet paměti pomocí nástroje Sledování výkonu.) Velikost paměti který program používá mohou způsobit program spustit z prostředků a crash.
Odkazy
Následuje seznam témat nápovědy, informace o paměti a její řízení:
  • Třída GC
  • Čítače výkonu paměti
  • Automatická správa paměti
  • Spolupráce s nespravovaným kódem.
Další informace získáte klepnutím na následující číslo článku databáze Microsoft Knowledge Base:
317297Návod pro ladění zablokuje, nevracení paměti, zablokování a sporech v jazyce Visual Basic.NET
Další informace naleznete na následující společnosti Microsoft Webech Developer Network (MSDN):
CLR

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 318263 - Poslední kontrola: 05/19/2011 12:57:00 - Revize: 6.0

, , , , , , , , , , , , , , , , ,

  • kbvs2005swept kbvs2005applies kbinfo kbmt KB318263 KbMtcs
Váš názor