ir dar ka rodo tas System.GC.GetTotalMemory(True) nes jis pas mane vis dideja, o sitas System.GC.Collect() nieko nekeicia... "Jornada Del Muerto" <Jornada@Lythum.lt> wrote in message news:iaop6d$l2r$1@trimpas.omnitel.net... > Siaip nepanasu kad viskas vyksta normaliai, dialoge mazint gali bandyt > funkcionaluma iki tuscio dialogo (t.y. uzkomentuot visa koda pradzioj) ir > ziuret ar lieka, poto po biski daugiau kodo atkomentuot, kol surasi > tiksliai kas padaro kad jis kabotu atmintyje. > > "Jornada Del Muerto" <Jornada@Lythum.lt> wrote in message > news:iaop3h$kto$1@trimpas.omnitel.net... >> Svariai viska darant taip, o jei aplamai tai ne butinai, ziurint ka >> darai viduje to dialogo, pvz viduje jis jei saveikaus su kazkokiais >> isoriniais objektais kurie nebus naikinami ir saugos informacija apie ji >> ar su jo objektais man rodos irgi nesinaikins, kaikuriem objektam >> nepakanka sito, o tenka dar Dispose dadejineti ar visus reference'us i ji >> ir jo ojektus null'int. >> >> "Valdas" <valdonas@super.lt> wrote in message >> news:iadqd1$p1j$1@trimpas.omnitel.net... >>> Na matai, as darau taip: >>> Private Sub fOpenFileDialog(ByVal Path as string, ByVal as Filter as >>> string) >>> Dim OpenFileDialog as New Form2 'cia tik dabar sukuriamas >>> OpenFileDialog >>> objektas >>> OpenFileDialog.ShowDialog() 'cia jis parodomas >>> End Sub 'tai kai is sito sub`o iseinu tai turetu OpenFileDialog objectas >>> susinaikinti ? >>> >>> "Jornada Del Muerto" <Jornada@Lythum.lt> wrote in message >>> news:iac3ns$3jh$1@trimpas.omnitel.net... >>>> Sveikas, >>>> >>>>> Na taip, o vat kaip uzdarineti, kuriuo budu geriau ? >>>>> Dim OpenFileDialog as new Form2 >>>>> ------------------------------------- >>>>> Form2.close >>>>> OpenFileDialog.close >>>>> Me.Close >>>> >>>> Jeigu tai bus tatinis klases memberis ir inicializuosi ji tik pirma >>>> karta >>>> antra karta nedarant new Klase, ta prasme: >>>> >>>> 'Klases zona: >>>> public class blabla..... >>>> >>>> ' Statinis memberis saugantis dialoga - si objekta viena kart sukuri >>>> ir >>>> daugiau nekuri - dideti ram bent del jo neturetu tada >>>> static _Object as ManoDialogas = null; >>>> >>>> ' Dialogo iskvietimas >>>> public Start ( path as string ) Sub >>>> >>>> ' Sis tikrinimas kurs nauja dialoga tik jeigu jo dar nebus >>>> sukurta, >>>> tai yra 1 karta per visa programos darba >>>> if IsNothing( _Object) Then >>>> _Object = new ManoDialogas(path) >>>> end if >>>> >>>> _Object.ShowDialog() >>>> >>>> ' cia kazka darai su rezultatu >>>> >>>> End Sub >>>> >>>> Uzdarineti nieko nereikia, tiesiog visam programos darbo laikui tada >>>> bus sukurtas 1 dialogas ir naudojamas kiekvieno iskvietimo metu tik >>>> jis - >>>> atmintis didet neturetu >>>> >>>>> Pasibandziau visus budus, ir ziurint per taskmanager`i rezultatai >>>>> keisti, >>>>> nesvarbu kaip uzdarineju, naudojamos atminties nesumazeja, o kelis >>>>> kartus >>>>> atidarius ir vel uzdarius su kiekvienu kartu naudojamos atminteis >>>>> kiekis >>>>> auga, kokia tai mistika... >>>> >>>> Jeigu darai butent kaip as parasiau auksciau ir atminties >>>> sunaudojimas >>>> auga, tai labai panasu kad auga del kazko kito ne del pacios dialogo >>>> klases, o galbut del to ka ji viduje dar daro. >>>> >>>> 1. Viens dalykas kaip naudoti garbage collector: >>>> >>>> GC.Collect() ' Iskvietus sia fukcija turetu atlaisvinti visa jau >>>> nenaudojama atminti, taciau tai blogas stilius ji naudoti release >>>> versijose, bet testuotis tai aisku gali >>>> >>>> 2. Prasuk 100 ar daugiau to dialogo iskvietimu cikla, kaip nors ji >>>> automatu uzdarinejant po atidarymo kad nereiketu ok spaudineti 100 >>>> kartu >>>> ir paziurek ar butent nuo sio iskvietimo auga, gali buti kad viduje sio >>>> dialogo ar kazkur kitur kazkoki objekta daug kartu darai new ir poto >>>> kazkur lieka jis issaugotas kad kabo atmintyje. >>>> >>>> Ta prasme gali gale sio Start metodo testams idet GC.Collect() ir be >>>> jo >>>> prasukt 100 karteliu. >>>> >>>> 3. Analizuok vidini savo dialogo funkcionaluma issamiau analizuojant >>>> jo >>>> viduje vykstancia logika, ta prasme ne viso dialogo kvietima bet >>>> konkreciai kuri vieta isaugina RAM naudojima ir palieka ji nesumazinus, >>>> maza tikimybe kad tai kaltas dialogas. >>>> >>>> 4. Tokiem Memory Leak'u (kas greiciausia kazkur pas tave vyksta) >>>> gaudymui gerai labai loginti atminties sunaudojima, susikuri loginimo i >>>> faila klase ir tenai irasineji einamaja programos eiga, tiesa pasakius >>>> loginimo klase kiekviens save gerbiantis developeris turi, pvz kaip man >>>> teke rasyti nemazai WinNT service'u ar webservice'u ten nebuvo >>>> galimybes >>>> msgbox'ais issivedinet kazkokia debug info ir loginimas buvo >>>> neisvengiamas >>>> kad suprasti kas vyksta. >>>> >>>> Geriausia loginimo ideologija tai sukurti loginimo lygius, pbz. >>>> 0 - Errors - logini tik klaidas, exception ir pan. >>>> 2 - Function calls - be errors logini dar ir funkciju kvietimus, ta >>>> prasme kiekvienos funkcijos pradzioje irasinejama i loga kokia funkcija >>>> buvo iskviesta, tada matant errorus eina suvokt kokioj funkcijoj buvo >>>> jis; >>>> 3 - Data flow - loginama ne vien funkciju callai, bet ir konkretus >>>> duomenys >>>> 4 - All - loginama viskas, pries kiekviena vb.net instrukcija >>>> iasinejama i faila jos iskvietimas, duomenys viskas. >>>> >>>> tada butu kazkas tokio: >>>> >>>> class Logger >>>> >>>> dim _level as int = 4 >>>> dim _file as string >>>> >>>> ' konstruktorius >>>> public Logger (level as int , file as string ) >>>> _level = level >>>> _file = file >>>> >>>> public sub write(level as int, text as string) >>>> >>>> ' jei logo lygis yra mazesnis arba lygus nustatyam reiskia tai >>>> loginti >>>> if level<= _level then >>>> ' irasineji cia i faila (butu kazkas tokio) bet cia rasau is >>>> galvos >>>> >>>> dim writeSubject as string ' sita yrasinesi i faila >>>> >>>> writeSubject = "[" & DateTime.Now.ToString() & "] [" & >>>> _level.ToString() & "] " & text ' suformuoji stringa su data, laiku ir >>>> loginimo lygiu >>>> >>>> '' tada irasineji i faila >>>> >>>> >>>> end if >>>> end sub >>>> >>>> O programoje geriausia kaip statini inicializuoji kazkur Logger objekta >>>> _Logger: >>>> >>>> public sub ManoMetodas (parametras as string) >>>> _Logger.write(2, "START ManoMetodas [" & parametras & "]") >>>> try >>>> >>>> '''' if kazkokia logika apdirbanti parametras >>>> >>>> _Logger,write(3, "Inicializuojamas dialogas [" & parametras & >>>> "]") >>>> ManoDialogas dlg = new ManoDialogas(parametras) >>>> >>>> '''' >>>> >>>> _Logger.write (2, "END ManoMetodas SUCCESS") >>>> >>>> catch Exception ex >>>> ' Errorai paprastai visada loginami >>>> _Logger.write(0, ex.Message & vbNewLine & wx.StackTrace) >>>> >>>> ' Taip gausi debuginimo ir loginimo sistema kur neesant problemu galesi >>>> sumazinti irasu i loga kieki, o esant bedomis isijungti daugiau >>>> informacijos, paprastai level parametra mes saugodavome registruose kad >>>> nereiketu lyst i koda nuejus pas klienta o uztektu tik registruose >>>> ilindus >>>> log leveli padidint kad daugiau info eitu, logo per mazai niekada >>>> nebuna, >>>> galima det pries kiekviena funkcija ipac tuo metu kai dar neisgaudyti >>>> bugai >>>> >>>> Tavo atveju i loga reiketu dar kiekviena karta irasineti atminties >>>> sunaudojima, kiek ram naudoja, tada po kiekvienos funkcijos matytum kas >>>> pasigrobe ir neatidave ram, va cia keletas nuorodu kur ieskoti, pasiimk >>>> geriausiai veikianti buda ir implementink loginimo sistema tada kad >>>> kiekviena karta be datos ir levelio dar fiksuotu ir free memory, galu >>>> gale >>>> taip gali prakontroliuoti viska: >>>> >>>> http://www.eggheadcafe.com/sample-code/csharp.NET/9090c5b8-fc8d-4b89-8632-9cba6460c78f/get-system-memory-size-in-net.aspx >>>> >>>> http://www.dotnetspider.com/resources/4612-Find-Memory-usage-CPU-usage.aspx >>>> http://aspalliance.com/806 >>>> http://social.msdn.microsoft.com/Forums/en-US/clr/thread/13556100-5bf8-4bfc-8504-d1068b0b20c8 >>>> >>>> p.S. As asmeniskai itariu kad beda ne paciam dialoge. >>> >>>