![]() |
Delphi vs. Windows, warum kopiert Windows schneller?
Hallo!
Ich hab keine Ahnung ob ich in der Sparte hier richtig bin, aber im Verschieben seid ihr ja Weltmeister :) Ich kopiere eine Datei mit den Methoden BlockRead und BlockWrite. Eine 50 MB-Datei über Netzwerk braucht per Explorer(STRG+C & STRG+V) ca. 10 Sekunden. Die gleiche Datei über Netzwerk per BlockRead&BlockWrite braucht ebenfalls 10 Sekunden. Soweit so gut. Nun habe ich aber eine MicroSDHC-Karte. Die 50MB Datei per Explorer dauert ebenfalls ca. 10 Sekunden. Die 50MB Datei per BlockRead&BlockWrite dauert hier auf einmal knapp ne Minute(57 Sekunden) :shock: Kann mir jemand erklären wie hier dieser Unterschied zustande kommt? :gruebel: Und kommt mir jetz nich mit Cache :mrgreen: |
Re: Delphi vs. Windows, warum kopiert Windows schneller?
Welche Blockgröße liest denn BlockRead/BlockWrite?
|
Re: Delphi vs. Windows, warum kopiert Windows schneller?
Das ist die Cache (WFC) :mrgreen:
Wie kopierst du es denn genau? |
Re: Delphi vs. Windows, warum kopiert Windows schneller?
Also ich darf hier nur ausschnitte posten, deshalb mal das relevante:
Delphi-Quellcode:
Allerdings irritiert mich da selbst gerade warum das buf-Array von 1-8191 geht. Ein Block sollte doch ne Zweierpotenz sein oder? :gruebel:
var
Buf: array[1..8191] of Char; gel, ges: Integer; begin repeat try try BlockRead(fFrom,Buf,SizeOf(buf),gel); BlockWrite(fTo,buf,gel,ges); inc(iPos,gel); except //IOError abfangen end; until(gel<>ges)or(gel=0); end; |
Re: Delphi vs. Windows, warum kopiert Windows schneller?
vermutlich ist 0..8191 gemeint
Char macht sich auch gut (dieses ist ab Delphi 2009 aber doppelt so groß) PS: eigentlich sollte es schneller gehn, immerhin schreibst du ja in den schnellen WFC und nicht direkt auf die Karte. Wobei ich hier auch eher in bis zu 64 KB-Schritten arbeiten würde. Muß denn ein Fortschritt angezeigt werden? |
Re: Delphi vs. Windows, warum kopiert Windows schneller?
Ja wird ein Fortschritt angezeigt, aber ich hatte testweise schon alles auskommentiert, sodass nurnoch das reine kopieren drin war. Also am Fortschritt liegts nicht.
|
Re: Delphi vs. Windows, warum kopiert Windows schneller?
Zitat:
Mal abgesehen davon, was spricht dagegen, einfach direkt die Windows API-Funktionen zu benutzen? ( ![]() Die Windowsentwickler werden sich schon einige Gedanken darüber gemacht haben, wie sie ihre Funktionen auf Performance optimieren. |
Re: Delphi vs. Windows, warum kopiert Windows schneller?
windows haut anfangs alles was reinpasst in den cache.
dadurch gehts anscheinend schneller |
Re: Delphi vs. Windows, warum kopiert Windows schneller?
Ich hatte es heut mittag nochmal mit nem größeren Buffer getestet und tatsächlich, nimm ich anstatt 8K 64K gehts sehr schnell, innerhalb von 10 Sekunden waren die 50 MB aufm Stick.. bzw auf der Karte.
|
Re: Delphi vs. Windows, warum kopiert Windows schneller?
Zitat:
Wenn man immer ein Byte zuwenig kopiert ist das sicher schlecht für die Performance. Ab einer bestimmten Puffergrösse (8kB, 16kB oder 32kB) bringt ein grösserer Puffer keine Verbesserung. 64kB oder 128kB bringen nach meiner Erfahrung nicht mehr als 32kB. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz