Frage

Wie wählt man die Größe eines Puffers (Bytes I aus lesen oder schreiben Buchse) für den maximalen Durchsatz, wenn eine Low-Level-HTTP- und FTP-Übertragung zu implementieren? Meine Anwendung soll mit HTTP oder FTP übertragen Daten über Verbindungen variierend von 130 Kbps bis 3 Mbps (Ich weiß, dass die erwartete Geschwindigkeit vorher). Manchmal ist es ein ein Transfer, manchmal geht es in beiden Richtungen. Soll ich mit einem gewissen durchschnittlichen Puffergröße bleiben oder muss ich variieren sie auf der Verbindungsgeschwindigkeit abhängig?

Danke.

War es hilfreich?

Lösung

Zuerst einige Messungen erhalten.

Dann, nachdem Sie eine zuverlässige Leistungsmessung haben, Änderungen an Ihrer Puffergröße und eine grafische Darstellung der Geschwindigkeit vs. Puffergröße darzustellen.

Da Sie die Verbindungsgeschwindigkeiten im Voraus kennen, sollten Sie in der Lage sein, einige Messungen der tatsächlichen Geschwindigkeiten mit unterschiedlichen tatsächlichen Puffergrößen zu erhalten.

Die Betriebssystem, Protokollstapel und Netzwerk ist zu komplex, eine Antwort von ersten Prinzipien zu erarbeiten. Sie müssen messen, bevor Sie etwas tun.

Andere Tipps

Wählen Sie eine Puffergröße über 8 KB. 9000 ist in der Regel die größte MTU (Maximum Transmission Unit) in Größe selbst die schnellsten Netzwerken verwendet.

Wenn Sie einen Puffer größer als die MTU der Verbindung verwenden, wird das Betriebssystem brechen sie in der MTU große Stücke je nach Bedarf und damit alles, was Sie über die MTU verwenden wird nur geringe Auswirkungen auf die Netzwerkleistung haben.

Um jedoch einen großen Puffer verwendet wird wahrscheinlich andere Auswirkungen auf die Leistung, wenn Sie Dateien sind zu übertragen, dann große Puffer verwendet, kann die Leseleistung erhöhen und damit die Geschwindigkeit Ihrer Anwendung zu verbessern.

Also, normalerweise eine schöne runde Zahl wie 16KB Kommissionierung ist eine gute Idee. Auf jeden Fall nicht unter 1500 gehen, da dies negative Auswirkungen auf die Netzwerkleistung bewirken kann (was das Betriebssystem manchmal kleine Pakete senden, die die Leistung verringern im Netzwerk).

Sie können Puffergröße erhalten: httpSocket.getReceiveBufferSize (); Ich empfehle schreibe diesen Puffer in hohem Grade den Prozess des Lesens in den RAM in. Zum Beispiel: ByteArrayOutputStream memoryFile. und erst nach den Puffer schreiben Sie es auf die Festplatte zu füllen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top