Utiliser les pointeur pour parcourir un tableau de char

cs_fcolo Messages postés 201 Date d'inscription mercredi 8 février 2006 Statut Membre Dernière intervention 20 février 2007 - 30 mars 2006 à 15:15
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 30 mars 2006 à 22:14
Bonjour,

j'ai actuellement un solution de capture de flux MJPG qui fonctionne mais qui n'est pas optimisée.
En effet, j'ai une boucle infini qui capture le flux et qui teste un à un chaque octet. Cette facon de faire consomme énormément de CPU.


private
char
forallMASK = Convert. ToChar
(255);
//OxFF
private char
InitImgMASK = Convert.ToChar
(216);
//OxD8
private char
EndImgMASK = Convert. ToChar
(217);
//OxD9

private Encoding encoding = System.Text.Encoding.GetEncoding
("iso-8859-1"
);
private int
SIZE_BUFF= 512;
//taille du buffer de lecture du stream
char
[] buff = new char
[SIZE_BUFF
];
StreamReader streamRead = new
System.IO.StreamReader
(myResponse.GetResponseStream
(),encoding
);
MemoryStream streamImage = new MemoryStream
();
StreamWriter streamWrite = new
System.IO.StreamWriter
(streamImage,encoding
);
while
(connected)
//on capture tant qu'on le demande
{
if
((nb_read = (streamRead.Read
(buff,0,SIZE_BUFF)))>0)
//on lit dans le stream
{
//ici je teste chaque octet du buff[] pour détecter
//le début (FFD8) et la fin (FFD9) de l'image JPEG,
//le tout en boucle.

}
}


Afin d'optimiser les performence, j'ai lu sur le forum qu'il fallait mieux utiliser des pointeurs (en code unsafe).
Je voulais me pencher dessus mais je n'ai pas réussi à modifier mon programme. Il me dit toujours qu'il ne peux pas convertir un char[] en char* lors d'un cast.
Mon but est de parcourir rapidement le tableau à la recherche de 3 octet précis (FF, D8 et D8).
Le flux MJPG provient d'une source internet (une caméra IP).
Je recois le flux dans un StreamReader. C'est ce stream qui me retourne un tableau de char (j'ai fixé le nombre de char lus à 512). Ensuite, j'ecris dans un MemoryStream avec un StreamWritter le tout en respectant l'encodage iso-8859-1 pour ne pas perdre des octet.

Pouvez vous m'indiquer comment modifier mon code pour pouvoir utiliser les pointeurs?
J'ai chercher sur le forum mais les réponses obtenues ne m'aide pas.

Merci

f.colo

3 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
30 mars 2006 à 15:25
char[] blablacontinue;

fixed( char* c = blablacontinue) {

}


Sébastien FERRAND (
blog)
[Microsoft MVP Visual C#]
0
cs_fcolo Messages postés 201 Date d'inscription mercredi 8 février 2006 Statut Membre Dernière intervention 20 février 2007 2
30 mars 2006 à 16:36
J'arrive pas à activer le Unsafe sous SharpDevelop.
J'ai deux projet, un composant de capture qui lève un evènement lorsqu'il a capturé une image et le projet principal qui s'abonne à cet évènement.
Je clic droit sur chauqe projet dans la solution pour aller dans les propriétés des projets et dans l'onglet compilé je coche "Autoriser le code Unsafe" mais ca me fait toujours l'erreur CS0214 qui stipule que je dois utiliser un contexte unsafe.
Seriez vous m'aider sur ce point là pour que je puisse tester cette solution?

f.colo
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
30 mars 2006 à 22:14
Salut,

En supplément de l'ajout de l'option de compilation /unsafe, tu dois affectuer un marquage unsafe sur les portions de code incriminée.
unsafe
Didacticiel du code unsafe

/*
coq
MVP Visual C#
*/
0
Rejoignez-nous