Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Fuite mémoire vb.net [ Divers / General ] (VbNicoG)

vendredi 4 juillet 2008 à 08:52:37 | Fuite mémoire vb.net

VbNicoG

Bonjour,

Je pense avoir détecter une fuite de mémoire dans un bout de code de mon application.
Je l'ai récupéré et remis dans une appli "vierge". J'ai une form dans laquelle j'ai 4 labels, un tooltip et un timer puis un module public dans lequel j'ai une enumération.
Le code est le suivant :
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim alarm As _AlarmEnum
        Dim i As Integer

        Timer1.Stop()
       
        Try
            For i = 0 To 3
                alarm = CType(1, _AlarmEnum)

                tooltip1.SetToolTip(label_alarm_code(i), alarm.ToString)

                If alarm <> _AlarmEnum.ErrNone Then
                    label_alarm_code(i).BackColor = Color.Red
                Else
                    label_alarm_code(i).BackColor = Color.Black
                End If

            Next

        Finally
            Timer1.Start()
        End Try
    End Sub

Rien de bien sorcier et pourtant quand je lance mon .exe, l'utilisation de la mémoire est à 10MB et après une nuit (on va dire 10H), l'utilisation de la mémoire est passé à 70MB et elle ne stabilise toujours pas!
Comme dans ma "vraie" appli, j'ai plusieurs fois ce bout de code, au bout d'une nuit, l'appli est plantée, il faut la fermer pour libérer les ressources (pas terrible pour de la prod). J'ai déjà essayer de forcer le garbage collector, mes objets semblent finalisés...
J'étais en vb2003, je suis passé en vb2005 express rien n'y fait. J'ai essayé sur 3 PC différents (XP pro et NT).
Quelqu'un a une idée ?
Et une autre petite question, comment on passe en mode release sur VB2005, sur VB2003 pas de soucis mais sur 2005 je ne trouve pas (Projet/Propriétés de l'appli/compiler-débobguer....??) Pour info j'étais en mode release sous vb2003 mais c'est pareil.

Merci d'avance et bonne continuation à tous!
Nico

vendredi 4 juillet 2008 à 09:08:47 | Re : Fuite mémoire vb.net

PCPT

Administrateur CodeS-SourceS
salut,

(je ne fais pas de dotnet)

try finally?
finally c'est pas en delphi?

(de lecture) il te faudrait un catch, si tu ne relèves pas l'exception, possible qu'il y ait un problème à ce niveau...

quel est l'intervalle de ton timer?
que contient ton enum?
est-ce vraiment (selon l'intervalle) la peine d'arrêter et de relancer ton timer?... voilà bien une action extrêmement gourmande!

alarm = CType(1, _AlarmEnum)
puisque pas i, pourquoi ne pas le faire avant la boucle?

enfin ta gestion d'erreur (peu importe la syntaxe), quel cas de figure peut te mettre en erreur sur 3 lignes?

++

Prenez un instant pour répondre à ce sondage svp  

vendredi 4 juillet 2008 à 09:09:02 | Re : Fuite mémoire vb.net

nhervagault

Administrateur CodeS-SourceS
Oui,

Il me semble que c'est un problème de conception de ta part.

Tu ne sais pas utiliser un timer.

Je ne vois pas pourquoi tu demerre et arrete le timer dans le traitement de ce meme timer.

De ce que je sais c'est.
Sur action ou evenements tu rends enabled un timer sur un interval t par exemple.

Et dans le tick tu travailles. --Do work comme disent les anglais.

Ensuite sur un autre evenement ou action si nécessaire tu arretes le timer.

Mais evites de travailler sur le timer dans son traitement, je n'en vois pas l'intéret.

Bon coding



vendredi 4 juillet 2008 à 09:13:04 | Re : Fuite mémoire vb.net

casy

Membre Club
Pourquoi arreter et relancer le timer au début et à la fin de ta procedure, laisse-le tourner tranquillement et faire sont boulot.

Ensuite je dirais qu'à priori ton problème ne vient pas de ce bout de code. Il ne semble pas y avoir de source fuite mémoire dans ce code


---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]

vendredi 4 juillet 2008 à 09:27:52 | Re : Fuite mémoire vb.net

VbNicoG

Bonjour à vous,
merci pour votre aide.

Alors pour commencer :
- le "catch" existe dans mon code réel, mais il n'y a pas d'exception dans ce bout de code.
- L'intervalle de mon timer est de 200ms.
- Mon enum contient les textes de mes alarmes. En fait je récupère un code alarme depuis une carte électronique.
   Public Enum _AlarmEnum
        al0 = 0
        al1 = 1
        al2 = 2
        ErrNone = 3
    End Enum
- alarm = CType(1, _AlarmEnum)
puisque pas i, pourquoi ne pas le faire avant la boucle?

Effectivement, dans ma vraie appli j'ai une variable qui est indexé par "i", voilà pourquoi je l'ai laissé dans la boucle.

- Ce timer est toujours enabled dans mon appli. J'ai un start et un stop car dans ma vraie appli je lance un thread qui récupère les données de ma carte (gestion d'un port com...) et il m'est arrivé d'avoir un chevauchement. Je pourrais effectivement enlever le start et le stop et augmenter l'intervalle du timer. Mais cela ne change pas le pb.
Bref, admettons, je supprime le start et stop du timer....
J'ai toujours le problème.
Je répète que mon bout de code est un code "batard" qui comme cela ne correspond à rien. C'est juste pour montrer que j'ai une fuite juste avec ça.
Est ce cette fuite peut venir du tooltip ? Je ne vois pas pourquoi ? mais....
Merci encore pour votre participation.


vendredi 4 juillet 2008 à 09:31:51 | Re : Fuite mémoire vb.net

VbNicoG

Bonjour casy,
Je crois qu'on a posté en même temps.
Pour te répondre : le timer j'explique ci dessus.
Si le problème ne vient pas de ce bout de code, je ne comprends pas ce qui peut jouer sur le processus de mon appli. J'ai testé plusieurs PC, VB2003/VB2005, mode release/mode debug...
Quel autre paramètre peut provoquer une fuite de mémoire ?

Merci

vendredi 4 juillet 2008 à 14:11:50 | Re : Fuite mémoire vb.net

VbNicoG

Réponse acceptée !
Re-bonjour,

J'ai résolu le problème.
Apparement, vb ne supporte pas le tooltip dans un timer.
J'ai donc mis l'évènement MouseEnter sur mes labels et je fais intervenir le tooltip dans cet évènement. Je n'ai plus de fuite de mémoire.
Je trouve ça particulièrement vicieux et je n'ai pas d'explications.
Si quelqu'un en a une, je suis preneur.
Sur ce, le problème est résolu.
Merci pour votre participation

vendredi 4 juillet 2008 à 14:15:43 | Re : Fuite mémoire vb.net

Kevin.Ory

Salut,

Je crois savoir quel est ton problème, même si cela contredit ton "Pour info j'étais en mode release sous vb2003 mais c'est pareil."

http://www.vbfrance.com/infomsg_VB-NET-FUITE-MEMOIRE_1134526.aspx
Mon dernier message => lien contient la réponse.

vendredi 4 juillet 2008 à 14:18:26 | Re : Fuite mémoire vb.net

Kevin.Ory

"J'ai donc mis l'évènement MouseEnter sur mes labels et je fais intervenir le tooltip dans cet évènement. Je n'ai plus de fuite de mémoire."
A mon avis ta fuite est toujours là, simplement que tu ne fais plus l'opération 4 fois toutes les 200ms, et donc l'augmentation de la mémoire est beaucoup plus faible.

vendredi 4 juillet 2008 à 14:20:21 | Re : Fuite mémoire vb.net

VbNicoG

Salut Kevin,

J'avais déjà lu tes réponses avec tout ce qui s'en suit : lien forum microsoft et msdn... J'ai cru alors être délivré de ce lourd fardeau,
je croyais alors avoir résolu mon problème et pourtant cela n'a rien changé!!!
Sais tu comment on compile en mode release sur VB2005 express ?
Je ne trouve pas dans les propriétés de l'appli contrairement à VB2003.
Merci


1 2

Cette discussion est classé dans : appli, code, mémoire, timer1, alarm


Répondre à ce message

Sujets en rapport avec ce message

détecter l'appli déja ouvert [ par ALEX001 ] Salut, je voulais faire un code qui permet, quand le prog est déjà ouvert, que quand ont clique sur l'icone cela restaure le prog, j'ai trouvé ce cod Mémoire insufisante [ par BernardBouree ] BonjourJ'ai créé un controle MSHFlexGrid dans un Cadre lui même inclu dans un controle TabStrib.Je veux créer plusieurs instance de ce controle MSHFle Comment implémenter une appli VB.NET sur un réseau Windows? [ par toni ] Salut, j'ai developpé une appli en VB.NET, sur mon micro,avec des Bases de données SQL SERVER et ACCESS.Avant d'aller plus loin, je me demande s'il y code retour en VB (pour un exe) [ par bdpatrice ] comment faire pour retourner une valeur d'une appli VB, et comment la renvoyer pour l'utiliser dans un traitement batch??? j'utilise un sub main dans Timer et compagnie ! [ par bugstyle ] Salut a tous,je débarque ds le VB, et comme d'hab, problème, en bref voici un exemple de ce que je souhaiterais faire ds une application plus compliqu Mon programme erste en mémoire même apres avoir fermé [ par ymerej ] Salut à tous,Je ne comprend pas, lorsque je quitte mon appli, le programme reste qd même en mémoire !Je le vois qd je fé ctrl + alt + supp et que je v [.net]Mémoire qui sature .. [ par Arnaud01 ] Bonjour à tous !L'utilisation de ma mémoire monte en flèche et je ne suis pas sûr de la raison :1: je ferme mal mon appli (?) : J'ai bien mis un bouto Manipuler d'autres appli avec SENDKEYS [ par darkbol ] Salut! J'ai un problême d'activation des fenêtres : je voudrais accéder au page setup d'une appli extérieure et c pr ca que j'utilise SENDKEYS ; le pr Adresse Mémoire d'une Appli ... [ par MaxSoldier ] Salut, je voulais savoir si il était possible en VB de modifier une des adresses mémoire d'un programme afin de crée un trainer proprement dit ( sans Api CopyMemory [ par misterN ] Salut à tous les développeurs,Mon appli MDI en VB6 plante léger et parfois me donne des couleurs bizarres depuis que je lui fais afficher des vignette


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,546 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.