Avatar billede Syska Mester
24. maj 2005 - 08:05 Der 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 :-(

// ouT
Avatar billede wisen Nybegynder
24. maj 2005 - 08:54 #1
.. 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
Avatar billede Syska Mester
24. maj 2005 - 09:24 #2
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....

// ouT
Avatar billede Syska Mester
24. maj 2005 - 09:38 #3
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...

smider du et svar...
Avatar billede wisen Nybegynder
24. maj 2005 - 10:36 #4
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.

Go' fornøjelse med "jagten" - her er et svar :)
Avatar billede Syska Mester
24. maj 2005 - 10:59 #5
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....

// ouT
Avatar billede Syska Mester
24. maj 2005 - 11:01 #6
For efter så er min reference jo væk, altså må den jo også blive slettet.... både objected og min reference

arghhh, for første gang HADER jeg .NET til skyerne
Avatar billede deadmez Nybegynder
25. maj 2005 - 13:41 #7
{
  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
Avatar billede Syska Mester
25. maj 2005 - 14:00 #8
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.....
Avatar billede skwat Praktikant
25. maj 2005 - 22:25 #9
Der er nogen ting som skal lukkes "korrekt", eks. bliver en forbindelse til en database ikke smadret, med mindre man har lavet en .close().
Avatar billede deadmez Nybegynder
26. maj 2005 - 09:54 #10
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...
Avatar billede Syska Mester
26. maj 2005 - 11:16 #11
ja, could be, henter information via WMI, og den eneste måde som jeg lige kan se, er

foreach (ManagementObject x in searcher.Get()){
  // do stuff
}
x.Dispose();

har jeg så lidt smidt ind, kan jo ske det gør en forskel, eller er der andre måder at lukke den på? noget jeg har overset?

// ouT

Smider selvf point til den som kan komme med en løsning, eller hvis det her virker deadmez, får du nogel point for det...
Avatar billede skwat Praktikant
26. maj 2005 - 12:15 #12
Du skal nok lægge x.Dispose(); før din sidste tuborg
Avatar billede Syska Mester
26. maj 2005 - 12:26 #13
dohhh, selvf, var også på searcher.Dispose() jeg ville smide den
Avatar billede deadmez Nybegynder
26. maj 2005 - 13:10 #14
hehe.. ;) håber du kan få det til at køre bedre.. :)
Avatar billede Syska Mester
26. maj 2005 - 14:34 #15
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

// ouT
Avatar billede Syska Mester
09. juni 2005 - 10:27 #16
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.....

Smider 120 Point hvis der kommer en løsning.....

Det er lavet i .NET 2.0 BETA 2

// ouT
Avatar billede Syska Mester
16. juni 2005 - 10:17 #17
:-(

øvøv, må vel bare regne med at det er en fejl i .NET 2
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester