[.NET/C#]Geheugengebruik simpele windows service

Pagina: 1
Acties:
  • 108 views sinds 30-01-2008
  • Reageer

  • Arie-Kanarie
  • Registratie: Juli 2004
  • Laatst online: 21-06-2025

Arie-Kanarie

Een keer wat anders

Topicstarter
Ik heb net even een simpele windows service gemaakt.
In de OnStart en OnStop wordt er iets weggeschreven naar de windows logboeken.
Ik maak hiervoor gebruik van het logging application block van de Enterprise Library van windows.
code:
1
Logger.Write("We started");


Het werkt allemaal goed maar hij gebruikt nu al 17 threads en 19-20MB aan intern geheugen. En dat terwijl het eigenlijk niets doet (CPU belasting is inderdaad 0% ;) )
Voor de applicatie die we aan het ontwikkeling zijn is het de bedoeling dat er nog een paar services komen.
Deze komen allemaal op een (web)server te draaien, als deze allemaal 20MB aan geheugen gaan snoepen begint het aardig wat van het geheugen te vreten.

Mijn vragen:
Hoe komt het dat mijn service zoveel geheugen vreet? Is dit standaard (bv. door .NET)?
Kan dit minder (zoja hoe?) en/of hoe zorg ik er tijdens het ontwikkelen voor dat het verdere geheugengebruik zo laag mogelijk blijft?

Software ontwikkelen in de Achterhoek voor leuke klanten door heel Nederland? Klik hier


  • DirkT
  • Registratie: Juli 2002
  • Niet online

DirkT

toet

Mij ervaring met .Net applicaties is dat ze standaard eigenlijk wel 18MB innemen van je RAM, misschien is het iets standaards van het framework. Als iemand het lager kan ben ik ook zeker geinteresseerd

iRacing profiel - FanaLEDs voor je racesimulatie displays en meer!


Verwijderd

Met objecten te vernietigen en juiste manier van de Garbarge Collector aanroepen kom je al een heel eind. Alleen toepassing hiervan is niet generiek. Als ik in jouw schoenen stond zou ik even googlen op memory management in .NET

Verwijderd

SantjeS schreef op dinsdag 04 juli 2006 @ 15:46:
Mij ervaring met .Net applicaties is dat ze standaard eigenlijk wel 18MB innemen van je RAM, misschien is het iets standaards van het framework. Als iemand het lager kan ben ik ook zeker geinteresseerd
Inderdaad, bij het opstarten nemen ze standaard ongeveer zoveel. Ik heb wel eens gemerkt dat als de rest van de machine een hoge load heeft dat de GC oid het geheugengebruik drastisch naar beneden brengt nog

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 10-12-2025
Maak voor de lol eens twee webservices en kijk hoeveel ze samen innemen. Meet daarvoor vrij geheugen, want als beiden het .NET framework gebruiken wordt dat dubbel geteld.

Blijft natuurljik staan dat je voor kleine code C of C++ moet gebruiken. Hello world moet in 4 kb kunnen.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Alex
  • Registratie: Juli 2001
  • Laatst online: 08-02 12:48
Wat hierboven gezegd wordt klopt inderdaad. Het gebruik van het .NET Framework wordt idd meegenomen. Let daarnaast op onnodige references. Daarnaast is het goed gebruiken van classes die IDisposible hebben geimplementeerd, ook vaak goed voor je code en preformance. Je hebt dan meer controle over het opruimen van objecten door de Garbage Collector.

Kijk daarnaast eens hoeveel geheugen de andere services gebruiken. Dar zul je van schrikken. Daarnaast wordt het niet heel snel veel meer resources die hij gaat gebruiken.

Kijk ook voor de grap eens naar deze link.

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
MSalters schreef op dinsdag 04 juli 2006 @ 22:04:

Hello world moet in 4 kb kunnen.
4kb???
Ooit wel eens naar een behoorlijke progtaal gekeken??? Je hebt het hier over het printen naar de video buffer van 11 tekens. Dit moet of extreem klein zijn ( ooit wel eens in 24b geschreven, alleen werkte het maar voor 1 vid kaart ) of je accepteert de balast van de standaard libraries ( wat bij .Net best wel eens 15Mb kan zijn )

Maar 4kb, dat is mierenpesten ten top, of je gaat voor extreem klein of je pakt de huidige libraries en accepteert dat je app 15 mb inneemt bij starten en na 1 miljoen tekens tikken pas 16 mb inneemt.

Misschien dat je in turbo pascal nog een 4kb programma kan maken, maar maak je het in (standaard) .Net / java dan ben je gewoon al x mb kwijt aan het framework, als je dan voor een minimale applicatie ging had je maar assembly moeten leren.

IMHO programmeer je of in een framework ( voor de netheid/ gemak ) of in assembly ( voor de snelheid ) maar 4kb zie ik tegenwoordig nergens meer voorkomen ( en ook niet meer nodig nu ik er rustig vanuit ga dat gemiddelde consumenten pc 512 mb bevat )

  • Arie-Kanarie
  • Registratie: Juli 2004
  • Laatst online: 21-06-2025

Arie-Kanarie

Een keer wat anders

Topicstarter
Allen dank voor de antwoorden, tips en links.
Tis dus al wat ik dacht: komt gewoon door het .NET framework.
Zoals Gomez al zegt: of je gaat voor het gemak of je gaat richting assembly.
Aangezien het de bedoeling is dat het in .NET geschreven wordt, en mijn kennis van C/C++ nihil is doen we het gewoon in .NET. Wordt het geheugen tenminste nog gebruikt ;)

Software ontwikkelen in de Achterhoek voor leuke klanten door heel Nederland? Klik hier

Pagina: 1