Utiliser les pointeur pour parcourir un tableau de char

Signaler
Messages postés
201
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
20 février 2007
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
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

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
char[] blablacontinue;

fixed( char* c = blablacontinue) {

}


Sébastien FERRAND (
blog)
[Microsoft MVP Visual C#]
Messages postés
201
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
20 février 2007
2
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
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
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#
*/