[c#]Limiter utilisation du CPU, travail flux video
cs_fcolo
Messages postés201Date d'inscriptionmercredi 8 février 2006StatutMembreDernière intervention20 février 2007
-
22 févr. 2006 à 10:58
cs_fcolo
Messages postés201Date d'inscriptionmercredi 8 février 2006StatutMembreDernière intervention20 février 2007
-
22 févr. 2006 à 17:30
Bonjours tout le monde,
j'ai devellopper une application de capture de flux mjpg.
Malheureusement, elle me consomme énormément de CPU.
Je souhaiterai savoir comment diminuer cette utilisation.
Mon code:
//while (!endOfCapture)
//{
ArrayList myAL =
new
ArrayList();
//recherche du début de l'image
while ((first.CompareTo(forallMASK) != 0) || (second[0].CompareTo(InitImgMASK) != 0))
{
first = second[0];
streamRead.Read(second, 0, 1);
}
//une fois au début de l'image
while ((first.CompareTo(forallMASK) != 0) || (second[0].CompareTo(EndImgMASK) != 0))
{
//on enregistre tous les char jusqu'a la fin de l'image
myAL.Add(first);
first = second[0];
streamRead.Read(second, 0, 1); //on lit char après char
}
myAL.Add(first);
myAL.Add(second);
byte[] image = getByteArrayList(myAL); //on transforme le flux en image
thePictureBox.Image = insertTextToStream(image);
J'ai essayé 2 facon (//while (!endOfCapture)), en fermant le flux après chaque réception ou en le laissant ouvert en permanence (solution la plus logique mais la plus gourmande, 100% cpu)
Savez vous comment je peux faire pour diminuer la consommation du cpu?
Je travaille sous visual studio 2005, en c#.
cs_fcolo
Messages postés201Date d'inscriptionmercredi 8 février 2006StatutMembreDernière intervention20 février 20072 22 févr. 2006 à 14:36
Salut, j'ai fait comme tu m'as dis, j'ai intégré cet appel de fonction dans ma boucle while (ca semble servir à continuer à travailler même en background si j'ai bien lu )
Je travaille avec un pentium 4 2.8Ghz et il est (avec ou sans le DoEvent() ) à 100% si je garde le flux ouvert et 50% sinon.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 22 févr. 2006 à 17:17
Salut, j'ai pas trop regardé ce que fais ton code mais si tu as une boucle while qui consomme tout le CPU tu peux utiliser un autre thread avec la méthode Sleep, faut voir si ça correspond pour ce que tu veux faire :
Thread t = new Thread( new ThreadStart( MyFunction ) );
t.IsBackground = true;
//t.Priority = ThreadPriority.Lowest;
t.Start( );
protected void MyFunction( )
{
while( true )
{
// Ici le code ta boucle
cs_fcolo
Messages postés201Date d'inscriptionmercredi 8 février 2006StatutMembreDernière intervention20 février 20072 22 févr. 2006 à 17:30
Merci lutinore mais mon application ne me permet pas d'attendre.
Je recois un flux en permanence et je ne peux me permettre de perdre des images dans ce flux MJPG.
Par contre, je ne suis pas contre un remanimant de ma structure de reception du flux.
Peut etre que je m'y prends mal et c'est ce qui consomme du CPU mais je ne vois pas comment faire autrement, ca me parait logique ma facon de faire et je ne vois pas d'autre facon.