J'ai des données dans un flux qui est réellement dans le format de uint. System.IO.Stream me permet seulement de lire le contenu sur un tableau d'octets, mais je ne veux pas lire les octets, puis les convertir en un tableau uint avec 1/4 de la longueur du tableau d'octets. Je veux le lire directement dans la mémoire du tableau uint afin de gagner du temps.Comment lire un flux géré dans un tableau uint directement en C#?
Si c'est en C++ non géré, c'est si simple. Envoyez simplement le pointeur vers le tableau uint et ce sera fait. Mais en C# cela ne semble pas si simple. J'essaie de produire un tableau d'octets avec la même adresse de mémoire qu'un autre tableau uint, puis d'envoyer le tableau d'octets en tant que paramètre de Stream.Read() de sorte que lorsque Stream.Read() écrit dans le tableau d'octets, le contenu est juste dans le tableau d'uint aussi bien. Mais j'ai regardé la classe Marshall et n'ai jusqu'à présent trouvé aucune solution à ce problème. Des idées?
Je peux prendre l'adresse du tableau uint, mais la méthode Read() n'accepte aucun pointeur. Il accepte uniquement les tableaux d'octets gérés. Et je peux utiliser des pointeurs pour copier la mémoire du tableau d'octets dans la mémoire du tableau uint, mais ce n'est pas lire directement dans le tableau uint. Ce qui compte ici, c'est le temps. – neuron
Il est toujours possible d'écrire votre implémentation dans C++ non géré et d'obtenir le résultat dans C# via P/Invoking. –
Juste à la sortie: Qu'est-ce que c'est? Quelle est la taille de l'ensemble de données de toute façon? À quelle fréquence l'algorithme sera-t-il appelé? Est-ce que cela doit être interactif, ou est-ce un travail sur un serveur quelque part? –