Utilisation de la mémoire

Signaler
Messages postés
67
Date d'inscription
vendredi 28 mars 2003
Statut
Membre
Dernière intervention
12 juillet 2011
-
Messages postés
64
Date d'inscription
mardi 18 décembre 2001
Statut
Membre
Dernière intervention
28 novembre 2008
-
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

Messages postés
363
Date d'inscription
vendredi 14 février 2003
Statut
Membre
Dernière intervention
20 avril 2010
3
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.
Messages postés
67
Date d'inscription
vendredi 28 mars 2003
Statut
Membre
Dernière intervention
12 juillet 2011

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"
Messages postés
363
Date d'inscription
vendredi 14 février 2003
Statut
Membre
Dernière intervention
20 avril 2010
3
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.
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
115
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>
Messages postés
67
Date d'inscription
vendredi 28 mars 2003
Statut
Membre
Dernière intervention
12 juillet 2011

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
Messages postés
67
Date d'inscription
vendredi 28 mars 2003
Statut
Membre
Dernière intervention
12 juillet 2011

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.

 
Messages postés
363
Date d'inscription
vendredi 14 février 2003
Statut
Membre
Dernière intervention
20 avril 2010
3
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
Messages postés
363
Date d'inscription
vendredi 14 février 2003
Statut
Membre
Dernière intervention
20 avril 2010
3
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)
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
115
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>
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
28
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
Messages postés
64
Date d'inscription
mardi 18 décembre 2001
Statut
Membre
Dernière intervention
28 novembre 2008

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|