Sender.dispose
Fermé
Partouchefrancis
Messages postés
104
Date d'inscription
mercredi 2 septembre 2020
Statut
Membre
Dernière intervention
11 novembre 2024
-
Modifié le 18 sept. 2020 à 08:58
Utilisateur anonyme - 19 sept. 2020 à 14:19
Utilisateur anonyme - 19 sept. 2020 à 14:19
10 réponses
NHenry
Messages postés
15163
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 novembre 2024
345
17 sept. 2020 à 18:26
17 sept. 2020 à 18:26
Dispose sert à libérer les ressources de l'objet (utile si l'objet gère des informations hors gestion du GC ou si il y a risque de fuite de mémoire).
Partouchefrancis
Messages postés
104
Date d'inscription
mercredi 2 septembre 2020
Statut
Membre
Dernière intervention
11 novembre 2024
17 sept. 2020 à 18:38
17 sept. 2020 à 18:38
Peux tu expliquer
Dans le cas présent
Si j’enlève cette ligne
et que j’exécute En cochant checkbox3 la souris prend l’aspect d’une croix et je ne peux pas effacer l’image du lapin
Peux tu me dire concrètement ce que fait
Dans ce cas et le sender correspond à mousedown ou à. Checkbox3.checked
Désolé je suis débutant
Dans le cas présent
Si j’enlève cette ligne
sender.dispose
et que j’exécute En cochant checkbox3 la souris prend l’aspect d’une croix et je ne peux pas effacer l’image du lapin
Peux tu me dire concrètement ce que fait
sender.dispose
Dans ce cas et le sender correspond à mousedown ou à. Checkbox3.checked
Désolé je suis débutant
NHenry
Messages postés
15163
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 novembre 2024
345
17 sept. 2020 à 19:56
17 sept. 2020 à 19:56
Cela force la libération du controle/objet "Lapin".
Je n'en sais pas plus.
Je n'en sais pas plus.
Utilisateur anonyme
18 sept. 2020 à 08:48
18 sept. 2020 à 08:48
Bonjour
De base ça crée un espace memoire et une référence vers cet espace qui sont managé, c’est à dire gérer par le garbage collector (quand ça sert plus et que le programme commence à utiliser un peu trop de ram et que le GC a envie => il libère la mémoire).
Cependant, le New ou d’autres actions peuvent créer des choses hors de portée du GC (des threads sans fin, utilisation de variables non managée etc..) Dans ce cas, le codeur de l’objet Lapin doit rendre cette classe Disposable et gérer lui même la « fin de vie » de son objet.
L’utilisateur doit disposer le lapin en fin de vie sinon tout ce qui n’est pas géré posera un problème à un moment où un autre.
D’autre part, ton code est largement perfectible
Par exemple
Ça s’écrit
Dim monLapin as New Lapin()instancie un lapin.
De base ça crée un espace memoire et une référence vers cet espace qui sont managé, c’est à dire gérer par le garbage collector (quand ça sert plus et que le programme commence à utiliser un peu trop de ram et que le GC a envie => il libère la mémoire).
Cependant, le New ou d’autres actions peuvent créer des choses hors de portée du GC (des threads sans fin, utilisation de variables non managée etc..) Dans ce cas, le codeur de l’objet Lapin doit rendre cette classe Disposable et gérer lui même la « fin de vie » de son objet.
L’utilisateur doit disposer le lapin en fin de vie sinon tout ce qui n’est pas géré posera un problème à un moment où un autre.
D’autre part, ton code est largement perfectible
Par exemple
For Each truc In Controls If TypeOf truc Is PictureBox Then n = n + 1 End If Next truc
Ça s’écrit
n = Controls.OffType(of PictureBox).Count()
Partouchefrancis
Messages postés
104
Date d'inscription
mercredi 2 septembre 2020
Statut
Membre
Dernière intervention
11 novembre 2024
18 sept. 2020 à 11:39
18 sept. 2020 à 11:39
Merci de ta reponse
Pourquoi la mémoIre serait elle saturée puisqu'on commence à peine l’exécution du programme
Pourquoi cela ne marche t il pas si on enlève cette ligne puisque apparemment c’est une ligne qui est facultative
Pourquoi la mémoIre serait elle saturée puisqu'on commence à peine l’exécution du programme
Pourquoi cela ne marche t il pas si on enlève cette ligne puisque apparemment c’est une ligne qui est facultative
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
19 sept. 2020 à 09:11
19 sept. 2020 à 09:11
J’ai du mal m’exprimer.
Un peu trop de RAM c’est quand tes variables utiles prennent 5Mo et tes variables obsolètes en prennent (complètement au pif) 500ko. On est loin de la saturation, c’est juste un peu trop.
Dans le diagramme d’utilisation de la RAM de Visual Studio, on voit les interventions du GC par des traits jaunes.
Sur un de mes projets de gros traitement de données qui utilise allègrement 3 ou 4 Go de RAM, le GC commence à travailler avant que j’ai ouvert le premier fichier, à ce moment il n’y a que quelques dizaines de Mo utilisé mais il y a déjà suffisamment de variables obsolètes pour faire le ménage.
Elle est tout sauf facultative. Tout ce que ne peut pas géré le GC ou ce qui ne s’arrête pas dès que l’objet n’est plus utilisé doit être stoppé/géré quelque part.
On implémente alors IDisposable, et on écrit le code qui va bien pour libérer l’objet correctement dans cette méthode.
Quand l’utilisateur tombe sur un objet IDisposable, il doit lancer Dipose() à la fin de vie de l’objet pour éviter tout risque par la suite.
Supposons que tu instancies 1000 objets qui font tourner 10 threads infinis chacun. Si tu ne disposes pas, quand tu arrêtes ton logiciel, ces 10 000 tournent toujours et plus rien ne peut les arrêter.
Dans ton cas le codeur de Lapin semble même avoir fait en sorte de rendre visible le fait qu’il n’a pas été disposé.....
Un peu trop de RAM c’est quand tes variables utiles prennent 5Mo et tes variables obsolètes en prennent (complètement au pif) 500ko. On est loin de la saturation, c’est juste un peu trop.
Dans le diagramme d’utilisation de la RAM de Visual Studio, on voit les interventions du GC par des traits jaunes.
Sur un de mes projets de gros traitement de données qui utilise allègrement 3 ou 4 Go de RAM, le GC commence à travailler avant que j’ai ouvert le premier fichier, à ce moment il n’y a que quelques dizaines de Mo utilisé mais il y a déjà suffisamment de variables obsolètes pour faire le ménage.
puisque apparemment c’est une ligne qui est facultative
Elle est tout sauf facultative. Tout ce que ne peut pas géré le GC ou ce qui ne s’arrête pas dès que l’objet n’est plus utilisé doit être stoppé/géré quelque part.
On implémente alors IDisposable, et on écrit le code qui va bien pour libérer l’objet correctement dans cette méthode.
Quand l’utilisateur tombe sur un objet IDisposable, il doit lancer Dipose() à la fin de vie de l’objet pour éviter tout risque par la suite.
Supposons que tu instancies 1000 objets qui font tourner 10 threads infinis chacun. Si tu ne disposes pas, quand tu arrêtes ton logiciel, ces 10 000 tournent toujours et plus rien ne peut les arrêter.
Dans ton cas le codeur de Lapin semble même avoir fait en sorte de rendre visible le fait qu’il n’a pas été disposé.....
Partouchefrancis
Messages postés
104
Date d'inscription
mercredi 2 septembre 2020
Statut
Membre
Dernière intervention
11 novembre 2024
19 sept. 2020 à 10:33
19 sept. 2020 à 10:33
Ce code correspondait à un exercice sur le drag and drop
Si on ne met pas le sender.dispose,le prog ne fonctionne pas
Pour un débutant qui apprend , comment peut il deviner qu’il faut mettre un dispose
Là est la question
Si on ne met pas le sender.dispose,le prog ne fonctionne pas
Pour un débutant qui apprend , comment peut il deviner qu’il faut mettre un dispose
Là est la question
Partouchefrancis
Messages postés
104
Date d'inscription
mercredi 2 septembre 2020
Statut
Membre
Dernière intervention
11 novembre 2024
19 sept. 2020 à 11:09
19 sept. 2020 à 11:09
http://pise.info/vb-net/08.htm
Chapitre 3.2.2
Exercice lapins
Chapitre 3.2.2
Exercice lapins
Utilisateur anonyme
19 sept. 2020 à 13:53
19 sept. 2020 à 13:53
Ok
je ne connaissais pas ce site.
Dans le préambule, il est écrit
J'ai survolé les différents chapitres jusqu'au point où tu en es et effectivement ça manque d'explications. Mais surtout il a pris un parti séduisant pour l'autodidacte mais "dangereux".
Il attaque directement en winform, il faut donc appréhender en même temps toutes les notions de l'objet et la gestion de l'interface.
Beaucoup de cours commence en mode console, la gestion de l'interface se limite à peu près à j'écris du texte, l'utilisateur répond, donc j'écris du texte etc...
Il n'y a pas besoin de boutons ou de picturebox pour apprendre à répondre à un évènement ni à en créer un.
Une fois toutes ces notions acquises, ces cours s'attaquent à l'IHM fenêtrée.
Malgré cela, il arrive, surtout au début que ces cours soient obligés de faire écrire un code à l'apprenant sans lui expliquer pourquoi, car il n'est pas encore "prêt".
Quand on attaque directement par l'IHM fenêtrée, il y a beaucoup de chose pour lesquelles on est pas prêt (et je te parle d'expérience, j'ai perdu un an à bidouiller, avant de ravaler ma fierté et commencer par le début).
L'autre point qui me chagrine c'est qu'il n'y a pas d'énoncer à ces exercices, en tout cas je n'en ai pas trouvé, même pas pour le premier.
Je suppose donc qu'il faut arriver au même résultat que l'exe et ensuite regarder comment l'auteur a codé sa correction.
Effectivement, dans ce cas il est peu probable de trouver par soit même, à ce niveau de cours, qu'il faut disposer l'objet.
Peut-être qu'un autre cours serait plus propice à ta formation.
Celui-ci est très accessible surtout si tu viens de VB6 ou VBA, mais il ne prend pas la mesure de l'objet dans .Net, alors que c'en est l'essence https://plasserre.developpez.com/cours/vb-net/
Celui d'openclassroom, moins accessible mais centré sur l'objet (à un moment il y avait quelques erreurs, j'espère qu'ils les ont corrigées)
Enfin, de nouveau sur developpez, le cours de Tahé, que je ne connais pas, mais son cours sur C# (langage "d'origine" de .Net) est tout simplement excellent.
je ne connaissais pas ce site.
Dans le préambule, il est écrit
Ce n'est pas un véritable cours en ligne, même si cela s'en rapproche dangereusement. Il se peut très bien que pour une autoformation, les explications soient par moments un peu courtes, voire franchement insuffisantes. Car encore une fois, ce site est avant tout un support pour des démonstrations et des exercices effectués en direct live (et sans filet).
J'ai survolé les différents chapitres jusqu'au point où tu en es et effectivement ça manque d'explications. Mais surtout il a pris un parti séduisant pour l'autodidacte mais "dangereux".
Il attaque directement en winform, il faut donc appréhender en même temps toutes les notions de l'objet et la gestion de l'interface.
Beaucoup de cours commence en mode console, la gestion de l'interface se limite à peu près à j'écris du texte, l'utilisateur répond, donc j'écris du texte etc...
Il n'y a pas besoin de boutons ou de picturebox pour apprendre à répondre à un évènement ni à en créer un.
Une fois toutes ces notions acquises, ces cours s'attaquent à l'IHM fenêtrée.
Malgré cela, il arrive, surtout au début que ces cours soient obligés de faire écrire un code à l'apprenant sans lui expliquer pourquoi, car il n'est pas encore "prêt".
Quand on attaque directement par l'IHM fenêtrée, il y a beaucoup de chose pour lesquelles on est pas prêt (et je te parle d'expérience, j'ai perdu un an à bidouiller, avant de ravaler ma fierté et commencer par le début).
L'autre point qui me chagrine c'est qu'il n'y a pas d'énoncer à ces exercices, en tout cas je n'en ai pas trouvé, même pas pour le premier.
Je suppose donc qu'il faut arriver au même résultat que l'exe et ensuite regarder comment l'auteur a codé sa correction.
Effectivement, dans ce cas il est peu probable de trouver par soit même, à ce niveau de cours, qu'il faut disposer l'objet.
Peut-être qu'un autre cours serait plus propice à ta formation.
Celui-ci est très accessible surtout si tu viens de VB6 ou VBA, mais il ne prend pas la mesure de l'objet dans .Net, alors que c'en est l'essence https://plasserre.developpez.com/cours/vb-net/
Celui d'openclassroom, moins accessible mais centré sur l'objet (à un moment il y avait quelques erreurs, j'espère qu'ils les ont corrigées)
Enfin, de nouveau sur developpez, le cours de Tahé, que je ne connais pas, mais son cours sur C# (langage "d'origine" de .Net) est tout simplement excellent.
Partouchefrancis
Messages postés
104
Date d'inscription
mercredi 2 septembre 2020
Statut
Membre
Dernière intervention
11 novembre 2024
19 sept. 2020 à 14:11
19 sept. 2020 à 14:11
Rendons hommage à ch.darmangeat
Il a fait avant le cours sur vb.net tout un cours sur l’algorytthme que j’ai fait
http://pise.info/algo/introduction.htm
Mais pour l’un comme pour l’autre je fais les mêmes critiques que toi avec à chaque fois quand on ne trouve pas le bon code et qu’on n’arrive pas à faire l’exercice un sentiment d’échec très décourageant et le sentiment d’être le dernier des c...
Apparemment le cours de Tahé serait mieux
Où le trouver?
L’exercice des lapins illustre bien ce que tu dis
Comment aurais,je eu l’idée de mettre ce sender.dispose ne sachant même pas que cela existait
Cordialement
Il a fait avant le cours sur vb.net tout un cours sur l’algorytthme que j’ai fait
http://pise.info/algo/introduction.htm
Mais pour l’un comme pour l’autre je fais les mêmes critiques que toi avec à chaque fois quand on ne trouve pas le bon code et qu’on n’arrive pas à faire l’exercice un sentiment d’échec très décourageant et le sentiment d’être le dernier des c...
Apparemment le cours de Tahé serait mieux
Où le trouver?
L’exercice des lapins illustre bien ce que tu dis
Comment aurais,je eu l’idée de mettre ce sender.dispose ne sachant même pas que cela existait
Cordialement