Ich lese Binärdateien und hier ist ein Beispiel:
%Vor%Offensichtlich spielt die Puffergröße (16 * 1024) eine große Rolle in der Leistung. Ich habe gelesen, dass es von der I / O-Technologie ( SATA , SSD , SCSI , usw.) und auch die Fragmentgröße der Partition, auf der sich die Datei befindet (wir können während der Formatierung die Partition definieren).
Aber hier ist die Frage: Gibt es eine Formel oder bewährte Methode zum Definieren der Puffergröße? Im Moment definiere ich basierend auf Versuch und Irrtum.
Bearbeiten: Ich habe die Anwendung auf meinem Server mit verschiedenen Puffergrößen getestet, und ich bekomme die beste Leistung mit 4095 * 256 * 16 (16 MB) !!! 4096 ist 4 Sekunden langsamer.
Hier sind einige ältere Beiträge, die sehr hilfreich sind, aber ich kann den Grund nicht verstehen:
" Sequenzielle Dateiprogrammierungsmuster und -leistung mit .NET " ist ein großartiger Artikel zur Verbesserung der I / O-Leistung .
Auf Seite 8 der dieser PDF-Datei wird angezeigt, dass die Bandbreite für Puffergrößen größer als acht Byte konstant ist . Beachten Sie, dass der Artikel 2004 geschrieben wurde und die Festplatte " Maxtor 250 GB 7200 RPM SATA-Festplatte " ist und das Ergebnis sollte sich durch die neuesten I / O-Technologien unterscheiden.
Wenn Sie nach der besten Leistung suchen, sehen Sie sich pinvoke.net oder die Seite 9 an der PDF-Datei zeigt die ungepufferte Datei Performance-Messungen bessere Ergebnisse:
In nicht gepufferten E / A werden die Daten der Festplatte direkt zwischen den Daten verschoben Anwendungsadressraum und das Gerät ohne Zwischenprodukt Kopieren.
Es gibt keine beste oder schlechteste Puffergröße, aber Sie müssen sich einige Aspekte ansehen.
Da Sie C # verwenden, können Sie Windows verwenden, Windows verwendet NTFS und die Seitengröße beträgt 4 MB. Daher ist es ratsam, ein Vielfaches von 4096 zu verwenden. Ihre Puffergröße ist also 16*1024 = 4*4096
, und es ist eine gute Wahl, aber zu sagen, ob es besser oder schlechter als 16*4096
ist, können wir nicht sagen.
Alles hängt von der Situation und den Anforderungen für das Programm ab. Denken Sie daran, hier können Sie nicht die beste Option auswählen, aber nur einige besser. Ich empfehle, 4096
zu verwenden, aber Sie könnten auch Ihre eigene 4*4096
oder sogar 16*4096
verwenden, aber denken Sie daran, dass dieser Puffer auf dem Heap zugewiesen wird, so dass seine Zuweisung einige Zeit braucht, so dass Sie nicht wollen Zuweisen eines großen Puffers, z. B. 128*4096
.
Tags und Links .net c# windows performance filesystems