Tema: Re: Visual studio 5 ir modaline forma
Autorius: Valdas
Data: 2010-11-02 14:58:25
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.
>>>
>>>