Problème de mémoire

Résolu
chandler8692 Messages postés 49 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 9 février 2007 - 23 mai 2005 à 20:11
chandler8692 Messages postés 49 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 9 février 2007 - 25 mai 2005 à 17:05
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

chandler8692 Messages postés 49 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 9 février 2007
24 mai 2005 à 22:57
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à.
3
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 22
25 mai 2005 à 00:02
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
3
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 22
24 mai 2005 à 00:29
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
0
chandler8692 Messages postés 49 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 9 février 2007
24 mai 2005 à 21:10
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chandler8692 Messages postés 49 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 9 février 2007
24 mai 2005 à 21:13
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"
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
24 mai 2005 à 21:48
Heu déjà copie nous le code si tu peux, ça devrait être plus parlant.

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 22
24 mai 2005 à 23:10
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
0
chandler8692 Messages postés 49 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 9 février 2007
24 mai 2005 à 23:42
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 ?
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 22
24 mai 2005 à 23:45
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
0
chandler8692 Messages postés 49 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 9 février 2007
24 mai 2005 à 23:52
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 ?
0
chandler8692 Messages postés 49 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 9 février 2007
25 mai 2005 à 00:59
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ô
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 22
25 mai 2005 à 01:24
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
0
chandler8692 Messages postés 49 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 9 février 2007
25 mai 2005 à 17:05
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.
0
Rejoignez-nous