Question

Comment choisir la taille d'un tampon (octets que je lis ou écrit dans socket) pour un débit maximal lors de la mise en oeuvre d'un transfert HTTP et FTP de bas niveau? Mon application doit transférer des données avec HTTP ou FTP sur des connexions allant de 130 Kbps à 3 Mbps (je connais à l’avance la vitesse attendue). Parfois, il s'agit d'un transfert aller simple, parfois, cela va dans les deux sens. Dois-je m'en tenir à une taille de mémoire tampon moyenne ou je dois la faire varier en fonction de la vitesse de connexion?

Merci.

Était-ce utile?

La solution

D'abord, prenez quelques mesures.

Ensuite, après avoir obtenu une mesure de performance fiable, modifiez la taille de votre tampon et tracez un graphique de la vitesse par rapport à sa taille.

Etant donné que vous connaissez les vitesses de connexion à l'avance, vous devriez pouvoir obtenir des mesures de vitesses réelles avec différentes tailles de mémoire tampon réelle.

Le système d'exploitation, la pile de protocoles et le réseau sont trop complexes pour élaborer une réponse à partir des premiers principes. Vous devez mesurer avant de faire quoi que ce soit.

Autres conseils

Choisissez une taille de tampon supérieure à 8 Ko. 9000 est généralement la plus grande taille de MTU (unité de transmission maximale) utilisée même sur les réseaux les plus rapides.

Lorsque vous utilisez un tampon plus grand que le MTU de la connexion, le système d’exploitation le scinde au besoin en morceaux de la taille d’un MTU. Ainsi, tout ce que vous utilisez sur le MTU aura peu d’effet sur les performances du réseau.

Toutefois, l’utilisation d’un tampon volumineux aura probablement un autre effet sur les performances. Si vous transférez des fichiers, l’utilisation de tampons volumineux peut augmenter les performances de lecture, ce qui accélère la vitesse de votre application.

Donc, choisir un bon nombre rond, comme 16 Ko, est une bonne idée. Ne passez certainement pas au-dessous de 1 500, car cela pourrait avoir une incidence négative sur les performances du réseau (car le système d'exploitation enverrait parfois de petits paquets qui réduiraient les performances sur le réseau).

Vous pouvez obtenir la taille du tampon: httpSocket.getReceiveBufferSize (); Je recommande fortement d'écrire ce tampon dans la RAM en cours de lecture. Par exemple: ByteArrayOutputStream memoryFile. et seulement après avoir rempli le tampon, écrivez-le sur le disque.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top