2010-09-09 6 views
9

Gibt es eine optimale Chunk-Größe für die Verarbeitung großer Dateien? Ich habe einen Upload-Service (WCF), mit dem Datei-Uploads von mehreren hundert Megabyte akzeptiert werden.So berechnen Sie die optimale Chunk-Größe für das Hochladen großer Dateien

Ich habe mit 4KB, 8KB bis 1MB Chunk Größen experimentiert. Größere Chunk-Größen sind gut für die Leistung (schnellere Verarbeitung), aber es geht zu Lasten des Speichers.

Also, gibt es eine Möglichkeit, die optimale Chunk-Größe im Moment des Hochladens von Dateien zu erarbeiten. Wie würde man solche Berechnungen durchführen? Wäre es eine Kombination aus verfügbarem Speicher und der Client-, CPU- und Netzwerkbandbreite, die die optimale Größe bestimmt?

Prost

EDIT: Wahrscheinlich sollte erwähnen, dass die Client-Anwendung in Silverlight ist.

Antwort

6

Wenn Sie befürchten, keine Ressourcen mehr zu haben, dann wird das Optimum wahrscheinlich am besten ermittelt, indem Sie die Parallelität Ihres Peek-Uploads mit dem verfügbaren Speicher Ihres Systems vergleichen. Wie viele gleichzeitige Uploads Sie gleichzeitig durchführen, ist die entscheidende Schlüsselvariable in jeder Berechnung, die Sie durchführen könnten. Alles, was Sie tun müssen, ist sicherzustellen, dass Sie genug Speicher haben, um die Parallelität des Uploads zu bewältigen, und das ist ziemlich trivial zu erreichen. Speicher ist billig, und Sie werden wahrscheinlich die Netzwerkbandbreite ausschöpfen, lange bevor Sie zu dem Punkt kommen, an dem Ihre Nebenläufigkeit die Speicherverfügbarkeit überschreiten würde.

Auf der Leistungsseite ist dies nicht die Art von Sache, die Sie wirklich viel während App-Design und -Entwicklung optimieren können. Sie müssen das System installiert haben, Benutzer laden Dateien für Real hoch und können dann die tatsächliche Laufzeitleistung überwachen.

Versuchen Sie eine Chunk-Größe, die der TCP/IP-Fenstergröße Ihres Netzwerks entspricht. Das ist ungefähr so ​​optimal, wie Sie zur Designzeit wirklich benötigen würden.

+1

Nun, ich war mehr auf Client-Rechner (die wir haben keine Kontrolle über). Wenn ich die Chunk-Größe auf 1 MB setze, wird der gesamte Speicher auf dem Client-Rechner verbraucht. Aber wenn ich es auf niedrig setze, dann wird es eine lange Zeit dauern, um zu verarbeiten. – Fixer

+3

Oh! mit einer Client-Maschine ist es viel einfacher. Nebenläufigkeit ist fast nicht existent. Solange Sie die Bits nicht im Speicher behalten, nachdem Sie sie erhalten haben, können Sie ziemlich genau die gewünschte Chunk-Größe verwenden. Jeder moderne Client, selbst ein Telefon, hat genug CPU und Speicher, um mit ein paar Dateien fertig zu werden, solange Sie die Bits nach dem Abrufen jedes Chunks in den Speicher streamen. Ich bezweifle, dass Sie einen signifikanten Unterschied in der Leistung auf der Anwendungsebene nur auf der Grundlage der Chunk-Größe sehen würden. Ich würde mit 1024KB für große Dateien gehen und es einen Tag nennen. –

Verwandte Themen