C Taille du tampon Windows

Dans Windows, disons que recv fonction recv pour recevoir des données d’un socket. Je suis curieux de savoir quelle serait la taille d’un tampon optimal? Je pourrais faire 1024 octets ou 51200 octets, ou plus. Je me demande lequel serait le meilleur pour la performance.

Cela ne s’applique pas seulement à la fonction recv , disons que je suis en train de lire un gros fichier texte, est-ce que je veux un très gros tampon ou un plus petit tampon?

Le système d’exploitation effectue sa propre mise en mémoire tampon, de sorte que la taille de votre mémoire tampon n’a pas vraiment d’importance. la pénalité de performance réside dans l’appel de fonction: un tampon de 1 octet sera inefficace car il nécessitera trop d’appels à recv() . un tampon trop grand n’est qu’un gaspillage d’espace.

une taille optimale correspond à environ deux fois la taille des données que vous prévoyez recevoir ou que vous pouvez traiter en un seul appel de recv() , avec une limite inférieure d’environ 1 ou 2 images par seconde.

Personnellement, j’utilise un tampon de 4 Ko, mais c’est ce que je préfère, et cela dépend en grande partie de l’application que j’écris.

Le système d’exploitation le met déjà en mémoire tampon, vous pouvez donc simplement lire un octet à la fois.

Cela dépend du type de données que vous attendez et du protocole que vous attendez. UDP, par exemple, vous donnerait un paquet entier en une fois, donc une taille de tampon optimale pourrait être de 1500.

Le véritable obstacle à la performance serait l’appel de la fonction ( recv dans ce cas) que vous ferez. Pour améliorer les performances, vous pouvez commencer avec une valeur élevée par défaut, puis parsingr les tailles de paquet reçues. Sur la base de l’parsing, vous pouvez adopter une taille de tampon (presque) “idéale”.

Si vous avez une situation de type serveur où vous ne savez pas quels services doivent être exécutés, vous pouvez utiliser un tableau de pools de mémoire tampon de différentes tailles, par exemple [128,1024,4096,16384,65536]. Lorsque quelque chose se connecte, utilisez une taille de 128 et, si toutes les 128 entrent, utilisez 1024 la prochaine fois .. et ainsi de suite.

Sur les clients ou les serveurs avec un protocole / chargement connu, devinez-le plutôt (comme suggéré par les autres affiches 🙂

Rgds, Martin