Article View: pl.comp.lang.vbasic
Article #92558Re: .NET problemy z pamięcią
From: Artur S.
Date: Thu, 03 Nov 2005 06:48
Date: Thu, 03 Nov 2005 06:48
54 lines
3408 bytes
3408 bytes
Tomasz Kopacz napisał(a): > On Wed, 02 Nov 2005 18:26:25 +0100, Artur S. wrote: > > >>Witam >>Program napisany w VB.NET, WinForms. Uruchomienie jednej z funkcji >>powoduje zwiększenie zajętości pamięci przez program. Uruchomienie tej >>funkcji 40 razy powoduje zajętość w okolicach 1GB (podglądam to >>Menedżarem zadań w XP), a tego zaakceptować nie mogę. Uruchomienie >>GC.Collect() nic nie daje. >>Funkcja ta tworzy obiekt (obiekt1), który tworzy obiekty, które tworzą >>obiekty i tak kilka poziomów. Refencje na obiekty trzymane są w >>HahTable, albo w zmiennych . >>Dopisałem funkcję, która robi: >>hTab = nothing 'hTab to hahstable >>i wywołuję ją zanim zrobię obiekt1 = nothing. >>Po takiej operacji program potrzebuje mniej pamięci, a wykonanie >>GC.Collect() zwalnia część pamięci. Ale nadal nie wszystko. >>Jak mogę rozwikłać tą sytuację? Czy przypisanie hTab = nothing mam być >>rozwiązaniem? Przecież mamy GC, który miał to wszystko załatwiać. >>Czy ktoś korzystał z: http://www.scitech.se/memprofiler/ ? >>A znacie może jakieś darmowe narzędzia, które mi pomogą? >> >>Pozdrawiam >>Artur S. > > > Wiszą ci gdzieś referencje do obiektów - i nic na to nie poradzisz. > hTab=nothing pomaga - ale pamiętaj że GC jest niedeterministyczny > Ale z tego co czytałem, to GC powienien zwolnić obiekty, na które nie ma referencji z 'root'. Sprawa wydawała mi się prosta, bo trzymam referencję na jeden obiekt, a on na dalsze obiekty. Ta referencja jest deklarowana w ciele funkcji. Program wychodzi z funkcji i nie trzymam żadnej refencji na którykolwiek z obiektów. A pamięci brakuje :( > Wiesz - GC nie zabezpieczy cię przed przeciekiem pamięci w sensie np. listy > do której tylko dodajesz elementy a nigdy nie usuwasz.... A jak tzymam refencję tylko do tej listy, a potem zrobię obiekt = nothing to nie mogę liczyć, że GC kiedyś zwolni tą pamięć? > Stąd mem profiler się przydaje. Ja się bawiłem CLR Profiler (do ściągnięcia > z MSDN), Borland OptimizeIt (ajjjj - no działa - to można powiedzieć ;) ) > Fajny jest QATime - ale kosztowny lekko > No i masz profilera w VS2005... Zainstalowałem wczoraj CLR Profiler, ale jeszcze nie potrafię odczytać jego raportów. Pozdrawiam Artur S.
Technical Details
Message-ID:
<dkcbu1$2he$1@nemesis.news.tpi.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!newsfeed.pionier.net.pl!news.nask.pl!news.nask.org.pl!newsfeed.tpinternet.pl!nemesis.news.tpi.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mailReferences:
<dkassr$466$1@atlantis.news.tpi.pl> <caqbkd3ad60t$.dlg@fdsvzxcc.rtb.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!newsfeed.pionier.net.pl!news.nask.pl!news.nask.org.pl!newsfeed.tpinternet.pl!nemesis.news.tpi.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail From: "Artur S." <arturstan@poczta_nie_spamuj.onet.pl> Newsgroups: pl.comp.lang.vbasic Subject: Re: .NET problemy z pamięcią Date: Thu, 03 Nov 2005 07:48:32 +0100 Organization: tp.internet - http://www.tpi.pl/ Lines: 54 Message-ID: <dkcbu1$2he$1@nemesis.news.tpi.pl> References: <dkassr$466$1@atlantis.news.tpi.pl> <caqbkd3ad60t$.dlg@fdsvzxcc.rtb.com> NNTP-Posting-Host: cqk150.neoplus.adsl.tpnet.pl Mime-Version: 1.0 X-Trace: nemesis.news.tpi.pl 1131000577 2606 83.31.242.150 (3 Nov 2005 06:49:37 GMT) X-Complaints-To: usenet@tpi.pl NNTP-Posting-Date: Thu, 3 Nov 2005 06:49:37 +0000 (UTC) User-Agent: Mozilla Thunderbird 1.0.7 (Windows/20050923) X-Accept-Language: pl, en-us, en In-Reply-To: <caqbkd3ad60t$.dlg@fdsvzxcc.rtb.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit