Lors de la lecture des données sur le réseau, vous spécifiez un tampon pour recevoir les données en:Comment gérer les données de mise en mémoire tampon lues sur le réseau?
byte[] b = new byte[4096];
socket.Receive(b);
Maintenant, ma première pensée est bien sûr de réutiliser le tampon de réception en déclarant comme une variable membre de la classe. Mon prochain problème est que je n'ai pas reçu toutes les données que je m'attends, donc j'ai besoin de tampon mes données. Cela est facile à accomplir en gardant la trace du nombre d'octets reçus, et en spécifiant le décalage: la question est ici
socket.Receive(m_ReceiveBuffer, count, m_ReceiveBuffer.Length - count);
Maintenant, que si elle est toujours pas assez, je devine que je dois développer la tampon, ce qui signifie la copie de la mémoire, et continuer à recevoir dans ce tampon. En supposant que quelque chose se soit mal passé, ce tampon continuerait de croître, et si des messages suffisamment gros sont reçus, le système serait saturé de mémoire.
Des idées pour gérer correctement cela? Y a-t-il une meilleure façon de recevoir les données que de simplement remplir, copier, développer, remplir, copier, développer dont je parle?
Cela ne résout toujours pas le problème où je ne peux pas traiter les données tout de suite, il continuera à remplir la mémoire. – esac
Pourriez-vous expliquer ce que vous entendez par "traiter" les données? Ne pouvez-vous pas "traiter" les données en morceaux ou avez-vous besoin de lire toutes les données, auquel cas vous aurez besoin de les avoir en mémoire? –