Utilisation de la mémoire

youil Messages postés 67 Date d'inscription vendredi 28 mars 2003 Statut Membre Dernière intervention 12 juillet 2011 - 23 mai 2006 à 17:05
emap Messages postés 64 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 28 novembre 2008 - 28 nov. 2008 à 11:20
Bonjour !!!

Je cherche comment faire pour diminué l'utilisation de la mémoire dans mais application en vb.net. J'ai trouvé la commande gc.collect() mais c'est pas suffisent alors quel qu'un a des idées.

Merci pour vos réponses !!!

11 réponses

cs_vpoyo Messages postés 363 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 avril 2010 6
23 mai 2006 à 17:09
Ben déjà mettre à nothing tout les objets dont tu n'as plus besoin au fur et à mesure. a la fin de chaque méthode supprimer explicitement tous les objets locaux.
0
youil Messages postés 67 Date d'inscription vendredi 28 mars 2003 Statut Membre Dernière intervention 12 juillet 2011
23 mai 2006 à 17:19
Merci!!

Ca je le fais déjà Nothing et quand je relance ma méthode l'utilisation de la mémoire augmente encore et encore. C'est quoi que tu veut dire par "a la fin de chaque méthode supprimer explicitement tous les objets locaux"
0
cs_vpoyo Messages postés 363 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 avril 2010 6
23 mai 2006 à 17:28
ben mettre à nothing les objets locaux c'est à dire ceux défini dans le scope de la méthode (ou fonction)

sinon essaye de récupérer un profiler pour application .net pour savoir qu'est ce qui occupe autant de mémoire.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 mai 2006 à 17:36
Eh eh, vive le garbage collector de vb.net : normalement tu n'a pas à te soucier de passer à nothing tes objets.

Le problème : la mémoire ne fera que grimper jusqu'à temps qu'il n'y en ai plus assez et que le garbage collector fasse son travail, ce qui ralentira ton application un petit moment... vive le .net...

_
Avant de poster dans le forum,
prière d'aller lire ceci :
http://www.codes-sources.com/reglement.aspx
<s></s>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
youil Messages postés 67 Date d'inscription vendredi 28 mars 2003 Statut Membre Dernière intervention 12 juillet 2011
23 mai 2006 à 17:41
Quand tu dis mettre à nothing tu parles-tu seulement des objects avec un NEW ou bien aussi les variables comme dim x as integer. Et c'est quoi, un profiler ?

Merci pour t'es réponse
0
youil Messages postés 67 Date d'inscription vendredi 28 mars 2003 Statut Membre Dernière intervention 12 juillet 2011
23 mai 2006 à 17:47
Voisi un exemple:
Je remplit un dataset 8000 recort je choisi ce que je veut et apres je remplit un listview. Je met a nothing mon dataset et je quitte. Si j'exécuter cette méthode plusieur fois de suite ben la mémoire monte toujour ex: 40 000KO,45 000KO

Pour tant mon listview a toujour le même nombre de ligne mais la mémoire monte.

 
0
cs_vpoyo Messages postés 363 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 avril 2010 6
23 mai 2006 à 17:49
juste les objets, les types de bases (integer, double, boolean ...) ce n'est pas la peine.

comme disait dark le garbage collector est très capricieux (je me demande s'il est pas pire que celui de java d'ailleurs).

Pour le profiler, c'est un outil (programme) qui va observer ton application tourner et te donner des informations sur la mémoire utiliser et les appels de fonctions, séquencement, ... ca te permet entre autre de déterminer les goulets d'étranglement

Ca serait peut être bien de regarder un peu plus côté garbage collector si on peut le forcer de manière certaine, ainsi que du côté des options de compilations si on peut pas limiter la mémoire ou un truc du genre
0
cs_vpoyo Messages postés 363 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 avril 2010 6
23 mai 2006 à 17:55
50 Meg de mémoire pour une appli dotnet ca me semble presque normal :-/


par contre tu es obliger de récupérer 40 000 enregistrement ? éviter de faire du select * si ce n'est pas la peine, et affines les filtres de recherches (clause where, limit, distinct)
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 mai 2006 à 18:16
Ouch, 50 Mo en vb.net, c'est normal ? Je suis bien content d'être resté en vb6 ;)

A ce que j'ai pu voir en vb.net, le fait de mettre à nothing les objets ne résoud pas le problème en surface : les objets ne sont libérés de la mémoire que lorsque le garbage collector est déclenché, du coup, faut attendre que ton prog manque de mémoire pour que vb.net libère la mémoire qui n'est plus utilisée... pratique...

Par contre, c'est sûr qu'un traitement sur 40 000 enregistrement, là tu peux peut-être optimisé un peu pour y gagner de la mémoire... Le listview de vb.net ne peut-il pas être directement alimenté par un RecordSource ?

_
Avant de poster dans le forum,
prière d'aller lire ceci :
http://www.codes-sources.com/reglement.aspx
<s></s>
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
23 mai 2006 à 19:38
j'avais ça sur Amstrad le garbage collection vers les années 80's

20 minutes d'attente pour nettoyer la mémoire

ça c'est du progrès !!!

Daniel
0
emap Messages postés 64 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 28 novembre 2008
28 nov. 2008 à 11:20
Hi,

Je fais remonter ce post parce que j'ai le même problème.
Je fais de la synchro SQLServer<>AS400 via une classe sur un backgroung thread en récupérant 300000 lignes...et la mémoire alloué pour le processus monte à 600 Mo...en Full TSE c'est pas génial (10 users)

-Ma connexion se fait via SqlConnexion
-Je libère tous les objets via un .Dispose() et un =Nothing (y compris ma connexion)
-Je n'ai plus aucun pointeurs externes sur cette classe
-J'ai implémenté un IDisposable sur ma classe et donc je .dispose() ma classe (avec liberation des objets)
-Pas d'objet COM

Mais rien n'y fait, l'allocation reste la même.
Le GC.Collect() n'y change rien
Le SqlConnexion.ClearSpool(MaCon) non plus.
Je me congne une exception memory

Je sais plus quoi faire (a part terminer le processus) et je trouve rien à ce sujet (je suis le seul???)
Je peux vous donner ma classe si vous voulez
Merci encore.

|emap|
0
Rejoignez-nous