"Effizienteste" Kopierroutine für eine große Datei
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
ok, da könnte er sich wirklich fürchterlich verschrieben haben, aber auch sonst vertan
> und den Rest (wie zum Beispiel bei einer 5MB-Date ^^) dann halt mit normalen Schritten
auf jeden fall danke für deinen hinweis, dass die Clustergröße nach wie vor 4KB beträgt.
(wobei mir das irgendwie spanisch vorkommt, ich hab da was mit 16KB im hinterkopf)
dass clusterweise lesen und schreiben vorteile bringt, ist einleuchtend.
> und den Rest (wie zum Beispiel bei einer 5MB-Date ^^) dann halt mit normalen Schritten
auf jeden fall danke für deinen hinweis, dass die Clustergröße nach wie vor 4KB beträgt.
(wobei mir das irgendwie spanisch vorkommt, ich hab da was mit 16KB im hinterkopf)
dass clusterweise lesen und schreiben vorteile bringt, ist einleuchtend.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Hab ich grade eben bei Microsoft nachgelesen: http://technet2.microsoft.com/WindowsSe ... x?mfr=trueKaeru Gaman hat geschrieben: auf jeden fall danke für deinen hinweis, dass die Clustergröße nach wie vor 4KB beträgt.
(wobei mir das irgendwie spanisch vorkommt, ich hab da was mit 16KB im hinterkopf)
Wenn die es nicht wissen, wehr dann?

Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

- Tafkadasom2k5
- Beiträge: 1578
- Registriert: 13.08.2005 14:31
- Kontaktdaten:
Also von der Erfahrung her, kommt man mit einem 4069 Byte Stack und 4KB großen Blocken (Stringgröße auf 4KB gesetzt) im Netzwerk wie auch Lokal auf die besten Durchsätze.
Vielleicht hat sich das mittlerweile geändert, aber wenn sich an der Clustergröße nicht so viel geändert hat, würde mich das wundern.
Natürlich ist das alles lange her, aber so viel hat sich an Allem nun auch wieder nicht geändert.
Ins Blaue geraten..?
Eigentlich nicht. Kannst dich ja mit ner Stoppuhr mal an sowas ransetzen. Mein Chef hat das "damals" auch gemacht. Also ganz unbegründet würde ich meine Ansätze nicht sehen.
Gr33tz
Tafkadasom2k5
Edit:
Vielleicht hat sich das mittlerweile geändert, aber wenn sich an der Clustergröße nicht so viel geändert hat, würde mich das wundern.
Natürlich ist das alles lange her, aber so viel hat sich an Allem nun auch wieder nicht geändert.
Ins Blaue geraten..?
Eigentlich nicht. Kannst dich ja mit ner Stoppuhr mal an sowas ransetzen. Mein Chef hat das "damals" auch gemacht. Also ganz unbegründet würde ich meine Ansätze nicht sehen.
Gr33tz
Tafkadasom2k5
Edit:
Microsoft Corp. hat geschrieben:Clusters and Sectors on an NTFS Volume
[...]
For example, on a disk that uses 512-byte sectors, a 512-byte cluster contains one sector, whereas a 4-kilobyte (KB) cluster contains eight sectors.
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Diese KopierAPI mit Fortschrittsanzeige ist natürlich sehr lahm, da alles
Häppchenweise geht, wobei dann noch die Ereignisse bearbeitet werden.
Wenn das nicht nötig ist, ist CopyFile Dein Freund (am besten mit PB4)
Häppchenweise geht, wobei dann noch die Ereignisse bearbeitet werden.
Wenn das nicht nötig ist, ist CopyFile Dein Freund (am besten mit PB4)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Danke, das ist doch mal eine Aussage, mit der ich was anfangen kannts-soft hat geschrieben:Diese KopierAPI mit Fortschrittsanzeige ist natürlich sehr lahm, da alles
Häppchenweise geht, wobei dann noch die Ereignisse bearbeitet werden.
Wenn das nicht nötig ist, ist CopyFile Dein Freund (am besten mit PB4)

Allerdings ist eine Fortschrittsanzeige schon wichtig, gerade weil ich damit Dateien ~ 2000MB kopieren möchte, und der User wissen soll, wann das fertig ist. Ok, ich könnte auch danach einen Message Requester machen, hmmm.... mal überlegen
Also ich persönlich finde es auch immer interessanter, wenn ein Ladebalken, Prozente oder zumindest die Restzeit angezeigt wird. Notfalls tut's auch die Geschwindigkeit, sodass ich mir die Restzeit selber ausdenken kann (obwohl das dann auch gleich das Programm erledigen kann).
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
- Tafkadasom2k5
- Beiträge: 1578
- Registriert: 13.08.2005 14:31
- Kontaktdaten:
Darf ich fragen, was an meiner so schwer zu verstehen war?pvmichael hat geschrieben:Danke, das ist doch mal eine Aussage, mit der ich was anfangen kann


OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Versteh ich auch net!Tafkadasom2k5 hat geschrieben:Darf ich fragen, was an meiner so schwer zu verstehen war?pvmichael hat geschrieben:Danke, das ist doch mal eine Aussage, mit der ich was anfangen kann![]()
Muss es denn immer was mundgerecht vorgefertigtes sein?
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

Weil ich kaum glaube, dass es schneller geht, wenn ICH anfange die Datei in 4096KB großen Blöcken auszulesen, um sie dann wieder zu schreiben. Es mag sicher Leute unter euch geben, die das können, aber ich gehöre sicher nicht dazu. Ich hab mit diesen ganzen Buffern eh schon so meine Probleme, egal ob Dateibuffer oder Netzwerkbuffer.Tafkadasom2k5 hat geschrieben:Darf ich fragen, was an meiner so schwer zu verstehen war?pvmichael hat geschrieben:Danke, das ist doch mal eine Aussage, mit der ich was anfangen kann![]()
Die Aussage von ts-soft war für mich insofern verständlich, dass er mir empfahl CopyFile zu verwenden, und dabei noch den Tipp das mit PB4 zu machen.
Es war nicht böse gemeint, als ich sagte, dass ich mit dieser Aussage etwas anfangen kann... wollte damit eigentlich nur sagen, dass ICH damit was anfangen kann, evtl. können ja andere mit Deiner Erklärung etwas anfangen und sogar bessere Ergebnisse erzielen, auf mich trifft das nur leider nicht zu.
Man kann schon seit längerem die Clustergröße individuell festlegen, natürlich kann man dabei nur aus vorgegebenen Werten wählen.
Die Clustergröße sollte sich nach der Größe der Partition richten.
Auch sollte man diese nicht zu hoch ansetzen, denn dann bekommt man Probleme bei sehr vielen kleinen Dateien. Denn die kleinste Datei ist immer so groß, wie der Cluster.
Folgender Algorythmus zum Kopierthema:
Man lege zuerst eine Buffergröße fest (z.B. 50MB), dann prüft man, ob die Datei diese Größe übersteigt oder nicht. Ist die datei größer, werden solange 50MB-Blöcke kopiert bis die Restgröße der Datei kleiner als 50MB ist. Dann passt man den Buffer auf die Restgröße an und kopiert den letzten Teil.
Wichtig ist hier aber, die Größe des Buffers nicht zu hoch auszuwählen. Denn je höher, desto länger braucht Windows um die Daten einzulesen.
Stellt man den Buffer zu klein, ist Windows mehr mit den Verwaltungsoperationen beschäftigt.
Die Clustergröße sollte sich nach der Größe der Partition richten.
Auch sollte man diese nicht zu hoch ansetzen, denn dann bekommt man Probleme bei sehr vielen kleinen Dateien. Denn die kleinste Datei ist immer so groß, wie der Cluster.
Folgender Algorythmus zum Kopierthema:
Man lege zuerst eine Buffergröße fest (z.B. 50MB), dann prüft man, ob die Datei diese Größe übersteigt oder nicht. Ist die datei größer, werden solange 50MB-Blöcke kopiert bis die Restgröße der Datei kleiner als 50MB ist. Dann passt man den Buffer auf die Restgröße an und kopiert den letzten Teil.
Wichtig ist hier aber, die Größe des Buffers nicht zu hoch auszuwählen. Denn je höher, desto länger braucht Windows um die Daten einzulesen.
Stellt man den Buffer zu klein, ist Windows mehr mit den Verwaltungsoperationen beschäftigt.