Problème de mémoire [Résolu]

Signaler
Messages postés
49
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
9 février 2007
-
Messages postés
49
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
9 février 2007
-
Salut, après 2 semaines acharnées, j'ai enfin fini le programme que j'avais entrepri defaire dans le cadre de mes TIPE.

Je l'ai fini aujourd'hui mais il subsiste une erreur :



Lorsque mon programme atteind à peu près 15 MO d'utilisatoin de mémoire
(information qui vient du gestionnaire des tâches), mon programmes
plante en sortant le message : "Failed to load resources from ressource file. Please check your setup"



Est-ce parceque le programme n'a pas le droit d'utiliser plus de mémoire ? Si c'est le cas, comment changer cela ?


De plus, la mémoire occupée ne cesse d'augmenter. En fait, ce que fait
le programme, c'est effacer des points et les réafficher un pixel à
coté pour être court. Que faire pour que la mémoire n'augmente pas de
20 ko toutes les secondes comme elle le fait actuellement ?



Merci

13 réponses

Messages postés
49
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
9 février 2007

J'AI TROUVE LA SOLUTION :

Je vais vous expliquer quel était le problème et comment je l'ai résolu :



En fait, un petit passage sur MSDN m'a donné la signification de ma "StackOverflowException" :

"The exception that is thrown when the execution stack overflows by having too many pending method calls."



Donc j'ai réfléchi à la raison pour laquelle j'aurai des méthodes qui
ne se ferment pas et j'ai trouvé la solution qu était toute bète :

mon code était comme ça (mais avec 400 lignes en plus) :





public MainForm()

{ InitializeComponent();


deplacement();
}



void deplacement()

{ blablabla;



deplacement(); }



Et donc déplacement() est sans arret appelé et ne se ferme
jamais, ce qui fait qu'après quelques milliers d'itérations, même mon
PC ne gère plus.



alors j'ai remplacé mon code par :






public MainForm()


{ InitializeComponent();


for(int k=0;k>-1;k++)



{ deplacement();
}

}





void deplacement()


{ blablabla; }







Et voilà, plus de problème por Guillaume. Et 1 programme qui marche, 1 !!



Maintenant, faut que je m'attaque à la secodne partie qui est bien plus
graphique et pour laquelle je n'ai pas encore d'idées mais je suis sur
que ça va venir.



Merci d'avoir eu l'intention de réfléchir à mon problème. J'était en
train de taper une réponse au message de Coq quand j'ai pensé à la
soluce, donc voilà.
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
20
Un par principe


Deux c'est pas propre


Trois dans un for tu as la déclaration d'une variable , son incrémentation , soit des opérations en plus et de l'éspace mémoire en plus.



::|The S@ib|::
MVP C#.NET
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
20
Le problème ne vient pas de là, mais les 20k dispose tes objets quand tu n'en a plus besoin. Graphics, Brushes ...

::|The S@ib|::
MVP C#.NET
Messages postés
49
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
9 février 2007

Mais je les réutilise sans arrèt dans une boucle for() et quand la boucle est finie, ça repart au début pour un tour.

Quoiqu'il en soit, j'ai fait un Dispose() de mes 2 SolidBrush et de mon Graphics.



Mais ça n'a pas l'air de changer quoi que ce soit. Ca m'embète vraiment
parceque c'est le résultat final qui m'interesse et je n'ai jamais le
temps de le voir.
Messages postés
49
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
9 février 2007

Ah oui, au fait, j'ai installer visual studio et le message qui m'est renvoyé est maintenant :



"Une exception non gérée du type 'System.StackOverflowException' s'est produite dans system.windows.forms.dll"
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Heu déjà copie nous le code si tu peux, ça devrait être plus parlant.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
20
for(int k=0;k>-1;k++)
{ deplacement(); }

Tu aurais voulu faire plus porc tu n'aurais pas pu.

::|The S@ib|::
MVP C#.NET
Messages postés
49
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
9 février 2007

Huhu, vas-y, je suis novice donc dis-moi ce qui ne va pas et comment faire mieux. Pourquoi est-ce si horrible que ça ?
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
20
C'est a priori une boucle for sans fin , un while serait plus approprié (while (true))
Il est appelé dans le constructeur ...
J'ose pas regarder le deplacement.

::|The S@ib|::
MVP C#.NET
Messages postés
49
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
9 février 2007

Ok, mais quelle est la différence, la boucle for() que j'ai utilisée est complètement équivalente.

Vous ne l'auriez pas fait comme ça juste par principe, parceque ça fait pas propre, ou pour une autre raison ?
Messages postés
49
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
9 février 2007

Tu m'as convaincu avec la mémoire, je l'ai changé. Bon ben je crois que
c'est fini pour ce programme. Mais je pense avoir très bientôt rebesoin
de vos conseils pour le programme auquel je vais m'ateller dès demain,
qui est un complément de celui que je viens de finir.



Tchaô
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
20
Oui la mémoire était pas le plus important sachant que tu n'avais qu'une variable et un int en plus. Ce qu'il fallait comprendre c'est qu'il faut prendre de bonne attitudes dans la manière de coder, en gardant entre autre en tête les notions de performances, clarté, suivi de code.

::|The S@ib|::
MVP C#.NET
Messages postés
49
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
9 février 2007

C'est clair. Mon ancienne methode, celle ou ma fonction se rappellait
toute seule, et puis ma boucle for aussi, étaient de réelles
abominations. Il va falloir que je retrouve les bonnes habitudes.