youil
Messages postés67Date d'inscriptionvendredi 28 mars 2003StatutMembreDernière intervention12 juillet 2011
-
23 mai 2006 à 17:05
emap
Messages postés64Date d'inscriptionmardi 18 décembre 2001StatutMembreDernière intervention28 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.
cs_vpoyo
Messages postés363Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention20 avril 20106 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.
youil
Messages postés67Date d'inscriptionvendredi 28 mars 2003StatutMembreDernière intervention12 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"
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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...
youil
Messages postés67Date d'inscriptionvendredi 28 mars 2003StatutMembreDernière intervention12 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 ?
youil
Messages postés67Date d'inscriptionvendredi 28 mars 2003StatutMembreDernière intervention12 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.
cs_vpoyo
Messages postés363Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention20 avril 20106 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
cs_vpoyo
Messages postés363Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention20 avril 20106 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)
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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 ?
emap
Messages postés64Date d'inscriptionmardi 18 décembre 2001StatutMembreDernière intervention28 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.