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 ?
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à.
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.
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.
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.
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.
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.