scalpa29
Messages postés21Date d'inscriptionjeudi 20 novembre 2008StatutMembreDernière intervention13 mai 2011
-
29 avril 2011 à 22:01
scalpa29
Messages postés21Date d'inscriptionjeudi 20 novembre 2008StatutMembreDernière intervention13 mai 2011
-
30 avril 2011 à 00:44
Voila, tout est dans le titre, j'exécute un programme qui traite et stoque des images bitmap dans des variables et j'aimerai bien vider la mémoire cache à chaque fin de boucle, car autrement mon programme plante au bout de quelques secondes.
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 29 avril 2011 à 22:23
Salut,
Il manque un bout de code.
Passe le programme a Fxcop Parexemple, il te dira quelles sont les ressources qui ne sont pas fermée peut etre.
Exemple, il faut fermer les ressources .Close();
et même faire un Dispose()
Tu peux aussi regarder du coté des weakreferences pour avoir des references faibles et
alleger le garbage collector
et evite d'appeler le garbage collector en direct
scalpa29
Messages postés21Date d'inscriptionjeudi 20 novembre 2008StatutMembreDernière intervention13 mai 2011 29 avril 2011 à 23:02
Merci de ta rapide réponse,
Aufaite je n'utilise pas de connexion SQL c'est juste une simple boucle while qui tourne et dans cette boucle j'apelle une méthode qui remplie la mémoire petit a petit.
Ce que je voudrai faire c'est juste vider la mémoire à la fin de ma boucle while...
PS: J'utilise ce code pour attendre 0.25 seconde entre chaque execution de ma boucle. Je me démandai si il fesait comme le Timer? ou si c'est ca qui m'empeche de vider la mémoire.
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 29 avril 2011 à 23:29
Mets ton code (l'exemple sql peut etre remplacé par des ressources fichier / stream / web service)
Pas de Applications.DoEvents dans un code, c'est pas propre.
Le sleep peut etre correct, mais il est preferable de faire de la programmation parrallele et de l'asynchrone. (j'ai pas trop de recul entre les deux concepts)
parralle = n threads
asynchrone = deleger à un thread un traitement et attendre le retour de son execution comme dans silverlight (appel des webservices)
Avec de la TPL par exemple. si tu est en DOTNET 4.0
scalpa29
Messages postés21Date d'inscriptionjeudi 20 novembre 2008StatutMembreDernière intervention13 mai 2011 30 avril 2011 à 00:20
while (blnVerif == false)
{
// Le programme attend 0.25 seconde entre chaque boucle
System.Threading.Thread.Sleep(250);
Application.DoEvents();
// Position 1
if (blnposition1 == false)
{
intNumberPosition1 = ReturnNumber(709, 503);
if (intNumberPosition1 > 0)
{
blnposition1 = true;
lblNumber.Text = Convert.ToString(intNumberPosition1 );
}
}
............
}
Bon en gros, pour faire simple:
Toute les 0.25 seconde, je lance mes tests.
la fonction ReturnNumber retourne un numéro en fonction des coordonnées, et c'est cette fonction qui prend de la place car elle fait une capture d'écran ( pour analyser les pixels ).
Donc ce que j'aimerai faire, c'est que quand j'arrive à la fin de ma boucle while, avant de recommencer à attendre les 0.25 seconde et refaire les tests, j'aimerai tout simplement vider la mémoire.
Pour avoir des informations?
Mais sur les traitements d'images, il est meme des fois indispensable de travailler en mode c# unsafe, mais il faut explorer les autres possibilités avant?
Bon courage.
Que dis gendarme et fxcop sur les performances.
Regardes avec clrprofiler aussi l'occupation memoire.
scalpa29
Messages postés21Date d'inscriptionjeudi 20 novembre 2008StatutMembreDernière intervention13 mai 2011 30 avril 2011 à 00:44
Ma capture d'écran est faite en fonction de la position des pixels, je fais une capture de l'écran de mon ordi, et je recherche la couleur de certaisn pixels en fonction des coodronnées X et Y.
En ce qui concerne le stockage de la capture voici le code:
Bitmap WindowsCapture = CaptureScreen();
Apres, comme je l'ai dis, je travaille dessus en conction des coordonnées donc je peux pas te dire grand chose de plus sur ce sujet.
En ce qui concerne gendarme et fxcop, je n'ai pas encore regarder car j'avais jamais utilisé cela.