🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.vbasic
Article #92558

Re: .NET problemy z pamięcią

#92558
From: Artur S.
Date: Thu, 03 Nov 2005 06:48
54 lines
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-mail
References: <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