24. maj 2005 - 08:05Der er
16 kommentarer og 1 løsning
Overvåge ram forbruget
Hej Eksperter,
Jeg har lavet et program som står og henter nogle oplysninger fra 5-10 andre computere, alt efter om de er tændt, og det virker som det skal.... mit eneste problem er at ram forbruget hele tiden stiger ligeså stille, over 12 timer bruger den 300 MB, og det er ligesom at grabage collection ikke bliver kørt rigtig for når jeg maximere/minimere falder forbruget ( meget mærkeligt ) og så ville jeg da egentlig godt vide hvad det var der kunne skyldes det.....
Oplysninger: 1) .NET 2.0 BETA 2 ( ved ikke om det kan have noget at sige, men jeg bruger den ping funktion deri, derfor 2.0, og så for at prøve det da det jo bliver released om 4 måneders tid ) 2) Windows Form 3) Kører på Windows XP
Hvordan kan jeg Debug det og se hvad det er som tager alt det RAM, det er lidt noget crap for jeg kan simpelthen ikke finde ud af hvad det er, og det er ved at være mega træls :-(
.. det nemmeste er nok at finde en memory profiler - det kan være meget svært at debug'e sig frem til "memory leaks". Jeg kender ikke lige nogle profilers til .NET, men en hurtig søgning på Google gav dette resultat : http://www.scitech.se/memprofiler
Men skulle det smarte ved .NET ikke at være man ikke _kunne_ lave memory leaks? sådan har jeg i hvert fald forstået det, så er jeg helt uforstående overfor hvordan den kan komme til at sluge så meget ram over lænegere sigt....
Alle mine objecter går jo out-of-scope, og så 15 mins senere bliver en ny timer "Elapsed" som så starter en ny process som kører færdig, og derefter går out-of-scope igen..... men det kan selvf være .NET 2.0 BETA 2 der fejler, dont know, men nu vil jeg da prøve det....
well, det ser jo ud til at være et godt program, så skal det bare stå og tygge på det nogle timer, så må jeg kunne se hvad det er der bruger al det ram...
Det er rigtig nok, at man ikke kan lave traditionelle memory leaks som man kan i f.eks. C++, men hvis man glemmer at null'e nogle referencer bliver objekterne ikke garbage collected.
Men de skulle vel stadig blive grabage collected hvis du går out-of-scope selvom jeg ikke null stiller den reference, altså hvis { object myObject = new object(); } her vil den jo blive slettet når jeg kommer ud af scope... og sådan er hele programmet faktisk bygget op.....
Det mærkelige er jo også at når jeg maxi/minimere falder ram forbruget....
{ object myObject = new object(); } er jo bare en instans af et objekt... du skal jo stadig sætte den til NULL hvis du vil resette korrekt... eller er jeg helt gal på den ? :P
Vil ikke resette, men når den er outof-scope, må den vil også stoppe med at bruge ram... når du ryger ud af de curly-backets kan man jo ikke access det object igen, altså brhøver man vel ikke sætte den myObject = null... eller?
mit egentlige problem er at når jeg minimere/maximere et par gange, så falder ram forbruget til 10 MB og så starter med at tælle op igen, indtil den løber tør for ram, hvad grunden er kan jeg slet ikke finde ud af.....
lige et øjeblik... du siger du henter informationerne fra en anden pc ?? kan det ske at du måske oprette for mange connections ?? og glemmer at lukke dem igen ?? kunne da godt være et problem...
bedre, jeg vil da kalde bare at få det til at køre, under .NET 2.0 BETA 1 kørte det i flere døgn uden problemer, derfor mistænker jeg lidt .NET for at lave lort, men har ikke kunnet finde noget på nettet endnu med folk der har samme problem...
Men det mærkelige er, at hvis jeg minimere og maximere bagefter falder ram forbruger af min app, derfor ved jeg ikke helt hvor jeg skal lede... og tror derfor heller ikke det har noget med åbne connection jeg måske ikke får lukket, for hvorfor skulle de bliver lukket bare fordi jeg minimere og maximere min app... :-S
Hvis der er nogen der er friske på at prøve programmet og se om i får samme program, vil jeg gerne sende koden.... I kan mail mig på mikael@syska.dk ... er ved at være ret træt af at det ikke virker....
Som sagt problemet opstår over længere tid, men forsvinder hvis man minimere/maximere min Gui.....
øvøv, må vel bare regne med at det er en fejl i .NET 2
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.