myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Welche Methode die Beste um schnell Dateien zu kopieren?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Welche Methode die Beste um schnell Dateien zu kopieren?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
CrocodileDundee
myCSharp.de-Mitglied

Dabei seit: 23.03.2018
Beiträge: 49


CrocodileDundee ist offline

Welche Methode die Beste um schnell Dateien zu kopieren?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,
in meinem Projekt möchte ich teilweise sehr viele kleine (ca. 1000 x 500kB) oder auch wenige große Dateien (ca. 1-2 x 2GB) von einem USB-Stick, der als Netzlaufwerk konfiguriert ist, auf die Festplatte des PCs kopieren.

Die Performance des File.Copy-Befehls scheint mir dabei etwas gering zu sein.
Deshalb habe ich auch schon nach anderen Klassen Ausschau gehalten.

- File.Copy
- StreamReader/Writer
- FileStream

Welche davon ist denn (zumindest tendenziell) die schnellste Methode?
Oder gibt es noch andere, die vielleicht noch schneller sind.

Danke und Gruß
Frank
01.10.2020 20:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Platoon Platoon ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.02.2017
Beiträge: 25
Entwicklungsumgebung: VS 2015 Pro (Arbeit), VS 2017
Herkunft: NRW


Platoon ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Frank,

also grundsätzlich ist es ja auch ein Thema mit welchem Durchsatz das entsprechende Laufwerk NETTO arbeitet.

Das Kopieren kleinerer Dateien dauert grundsätzlich länger das als Kopieren von Größeren. Kannst du auch einfach mal leicht im Explorer probieren und die Zeiten vergleichen.

Schau mal hier:  File.Copy vs. Manual FileStream.Write For Copying Files

Das fand ich z.B. ganz hilfreich.
01.10.2020 21:40 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
FZelle
myCSharp.de-Poweruser/ Experte

Dabei seit: 23.04.2004
Beiträge: 9.858


FZelle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Bei der Menge würde ich evtl auf RoboCopy setzen.

 https://github.com/tjscience/RoboSharp
01.10.2020 21:55 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.280
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von CrocodileDundee:
Welche davon ist denn (zumindest tendenziell) die schnellste Methode?

Ich hab damals  QuickIO entwickelt, weil ich ähnliche Probleme mit vielen kleinen Dateien und SMB hatte (Projekt ist nicht mehr aktiv, weil es so mit der Zukunft mit .NET Core und .NET 5 nicht funktioniert und man grundlegend neu machen müssten).

Alle deine Drei Varianten verwenden unter der Haube (im Prinzip) den selben Mechanismus. Sie unterscheiden sich eigentlich nur im Overhead.

Die schnellste Variante direkt mit Windows Boardmitteln ist  CopyFile aus Win32, was ich auch für QuickIO verwendet habe.
Es gibt keine Möglichkeit direkt von .NET aus mit CopyFile zu arbeiten, ohne zusätzlichen Overhead zu haben, auch File.Copy() hat einen Overhead, der gerade bei vielen kleinen Dateien enorm viel Zeit kostet (Attribute checks etc..).

Bleibt für Dich:
- CopyFile via PInvoke zu verwenden
- .NET Mittel verwenden und mit Overhead leben
02.10.2020 09:56 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 24.10.2020 16:21