Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
QuickIO.NET - Performante Dateioperationen
Shojo
myCSharp.de - Member



Dabei seit:
Beiträge: 8

beantworten | zitieren | melden

Zitat von Abt
Das ist im Gegensatz zu Deinem Code nicht nur typsicher sondern auch testbar.
Ok das Argument leuchtet mir ein, dann vergesse mal meine Anfrage ;)

Gruß
Shojo
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15827
Herkunft: BW

Themenstarter:

beantworten | zitieren | melden

Zum Copy.
CopyAsync führt das ganze über die Windows API (CopyFile Win32) aus. Nichts anderes als die Copy()-Methode in einem Task.

TransferJobs sind Implementierungen von mir, die erst die Datei schrittweise lesen und übertragen (über Streams).
Nach jedem Lesen von standardmäßig einem Chunk, also Dateiabschnitt (Standard 1024 Bytes) wird dieser transferiert.
Ich kann hier Lesen und Schreiben ohne größeren Aufwand nicht parallel machen (Pipeline), da ich .NET 2.0 unterstützen will.
Du kannst versuchen den Chunk zu vergrößern, indem Du den BufferSize im Konstruktor nach oben veränderst.

Der Standard ist 1024 Bytes, da dies der geringste Wert darstellt, der empfohlen wird, da ansonsten der interne Windows Buffer zu oft aufgerufen wird.
Je kleiner der Buffer desto öfter werden die Events aufgerufen und desto genauer sind die berechneten Aussagen zu Laufzeit und Kopiergeschwindigkeit.
Bei neuen Systemen wird 4KB als "üblicher Wert genannt" - vermutlich sollten bei GBit-Anschlüssen im lokalen Netzwerk auch höhere Werte noch zu vernünftigen Aussagen führen.

Letzten Endes wird eine Datei durch das Übertragungsprotokoll sowieso geteilt.
Es bietet sich also an, dass der Chunk so groß ist wie das Frame des Übertragungsprotokolls. So vermeidet man Overhead; aber da gibt es nie eine Pauschale, die man hier anwenden könnte.
private Nachricht | Beiträge des Benutzers
Shojo
myCSharp.de - Member



Dabei seit:
Beiträge: 8

beantworten | zitieren | melden

Ich habe nun den Buffer auf 1MB hochgetzt und komme nahe der 50MB/s.

Das Ergebnis ist für mich vollkommen ausreichend, danke für den Support!

Gruß Shojo
private Nachricht | Beiträge des Benutzers