2010-04-19 3 views
2

J'espérais que quelqu'un puisse expliquer pourquoi mon application, lorsqu'elle est chargée, utilise des quantités variables de RAM. Je parle d'une version compilée qui utilise l'exe directement. C'est une application assez basique et il n'y a pas de branche conditionnelle au démarrage de l'application. Pourtant, chaque fois que je démarre le montant de la RAM varie de 6 Mo à 16 Mo.Quantité d'utilisation de la mémoire vive

Je sais que c'est sur la petite extrémité de l'utilisation de toute façon, mais je suis curieux de savoir pourquoi cela se produit. Edit: pour donner un peu plus de précisions sur ce que l'application fait réellement.
C'est un projet WinForm.
Il se connecte à une base de données à l'aide de sqlclient pour récupérer une liste de serveurs.
En fonction de cette liste, une série de boutons est créée pour démarrer et arrêter un service sur ces serveurs.
Utilisation de la classe System.Timers pour vérifier l'état des services sur ces serveurs toutes les 20 secondes.
Les applications à ce stade se trouvent là et attendent la saisie de l'utilisateur via l'un des clics de bouton pour démarrer/arrêter le service.

+0

Peut-être que vous pourriez dire ce que votre application fait, mieux encore fournir un exemple de code. –

+1

Besoin de code. Quand vous dites "application assez basique" j'imagine 'Console.WriteLine (" Hallo Wurlds! ");' – Warty

+0

Comparez-vous le démarrage à froid vs les démarrages à chaud? – Oded

Répondre

6

L'astuce ici est que la quantité de RAM rapportée par le calendrier des tâches est pas la quantité de RAM utilisée par votre application. Au contraire, c'est la quantité de RAM réservé pour une utilisation par votre application. N'oubliez pas qu'avec les frameworks gérés comme .Net, vous ne demandez ni ne libérez de la mémoire directement. Au contraire, un garbage collector gère la mémoire pour vous. La quantité de mémoire réservée pour votre application à un moment donné peut varier et dépend d'un nombre de facteurs différents, y compris la pression de mémoire créée à ce moment par d'autres programmes. Pensez-y de cette façon: si vous avez besoin de 10 Mo de RAM pour votre application, est-il plus rapide de demander et de le renvoyer au système d'exploitation 1 Mo à la fois sur 10 demandes/versions ou de réserver le bloc à la fois une demande/libération? Maintenant, étendez cela à un scénario où vous ne savez pas exactement de combien de RAM vous aurez besoin, seulement que c'est quelque part dans le voisinage de 10 Mo. En outre, votre ordinateur a 1 Go assis là inutilisé. Bien sûr, la meilleure chose à faire est de prendre une bonne partie de la RAM disponible. Même 20 ou 30 Mo ne seraient pas déraisonnables par rapport au bélier qui est resté inutilisé, car la RAM inutilisée est gaspillée.

Si votre système commence à ressentir de la pression mémoire, alors .Net peut facilement ramener de la RAM dans le système. C'est l'une des façons dont les langages gérés peuvent parfois donner de meilleures performances que les langages comme C++ avec la gestion traditionnelle de la mémoire: un garbage collector qui peut plus facilement tenir compte de l'intégrité du système lors de l'allocation de mémoire.

0

Il peut être lié à la gigue, après le premier chargement de la gigue déjà créé une version compilée et il n'a pas besoin de fonctionner. A part cela, vous devrez nous donner plus de détails sur l'application et le type de mémoire dont vous parlez.

1

Qu'est-ce que vous utilisez pour déterminer la quantité de mémoire utilisée? Même avec des applications régulières, Windows allouera agressivement la mémoire inutilisée à l'avance, avec les applications .NET, c'est encore plus compliqué quant à la quantité de mémoire réellement utilisée et à la quantité de Windows qui sera disponible instantanément. Si une autre application demande réellement de la mémoire, cette mémoire réservée sera réutilisée.

Une façon de vérifier est de minimiser l'application (au moins sur XP).Si vous regardez l'utilisation de la mémoire dans quelque chose comme le gestionnaire de tâches, vous remarquerez qu'il tombe tout de suite, éliminant le montant "aléatoire" alloué.

Questions connexes