![]() |
AW: Dateien performant mit Callback kopieren
Zitat:
Schau mal ![]() Natives lesen ist langsamer als aus einer Datenbank - also ich hätte gewettet das der Datenbankoverhead das ganze viel langsamer macht. |
AW: Dateien performant mit Callback kopieren
[OT]
Zitat:
Ob du das tust weis ich leider nicht. Aber hier ein Beispiel.
Delphi-Quellcode:
[/OT]
Progress := trunc(100 * (Bass_ChannelGetPosition(Channel, BASS_POS_BYTE) / Bass_ChannelGetLength
(Channel, BASS_POS_BYTE))); if (ProgressBar.Value <> Progress) then ProgressBar.Value := Progress; Zitat:
gruss |
AW: Dateien performant mit Callback kopieren
Zitat:
![]() |
AW: Dateien performant mit Callback kopieren
Zitat:
|
AW: Dateien performant mit Callback kopieren
Zitat:
Zitat:
|
AW: Dateien performant mit Callback kopieren
Zitat:
Aber ich verstehe nicht, warum Du nicht die Windows-Hausmittel nutzt, die sind i.A. sehr performant und darauf optimiert sich an die jeweiligen System anzupassen. ...:cat:... |
AW: Dateien performant mit Callback kopieren
Eine Datei in einem Rutsch mit CopyFile zu kopieren ist doch zu einfach.
Was mich an der Sache interessiert ist der CallBack und immer auf dem Laufenden zu sein, wieviel gerade kopiert wurde. |
AW: Dateien performant mit Callback kopieren
Zitat:
War nur ein Tip. Zitat:
gruss |
AW: Dateien performant mit Callback kopieren
Zitat:
Könnt ihr mir vielleicht ein Beispiel zeigen was ihr mit Hausmitteln meint? Damit meine ich kein simples CopyFile. Sondern irgendwas mit einem CallBack, sodass ich immer auf dem Laufenden bin und den Kopiervorgang auch von Außen abbrechen kann. Aktuell nutze ich alte Windowsmittel, die viele verfluchen. Ich sag nur Block-Methoden. Da ich hier aber eine Schleife habe, kann ich wann immer ich möchte abbrechen. Edit mein Problem mit dem CopyFileEx-Callback ist, dass ich nicht weiß wie ich die kopierten Bytes hochzählen kann.
Delphi-Quellcode:
Bei einer Datei könnte ich OverallBytesCopied := TotalBytesTransferred; schreiben. Aber bei mehreren geht das nicht denke ich.
TInterlocked.Add(OverallBytesCopied, ....); // TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred ?
Delphi-Quellcode:
procedure CopyCallBackTEST(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred: Int64; dwStreamNumber, dwCallbackReason: DWORD; hSourceFile, hDestinationFile: THandle); stdcall;
begin if dwCallbackReason = CALLBACK_CHUNK_FINISHED then begin if not CancelCopy then begin TInterlocked.Add(OverallBytesCopied, ...); end; end; end; Result := CopyFileEx(PChar(Source), PChar(Dest), @CopyCallBackTEST, nil, @CancelCopy, 0); |
AW: Dateien performant mit Callback kopieren
Wenn Du schon weißt was Du willst, dann nutz es doch:
![]() Falls Du mehr Performance willst, dann mußt Du erst einmal alle möglichen Scenarien aufbauen, z.B. Copy auf ein und der selben Festplatte, copy von Festplatte1 auf Festplatte2 usw. Und dann für jedes Deiner Scenarien eine eigene Routine schreiben. (Ob da jetzt der (Daten)Bus oder der Festplatten-Controler der Flaschenhals ist, ist dann Thema für den 3.Grad) Übrigens konnte man früher SCSI-Festplatten Vom SCSI-Controler kopieren lassen. Da ging die Luzy wirklich ab. War nur ein wenig aufwendig die Parameter richtig zu bestimmen. Und war nicht ganz trivial.:twisted: Die beim Kopiervorgang eingesparte Zeit hat den Programmieraufwand nie aufgewogen. Wenn Du nicht eine ganz spezielle Anwendung im Sinn hast, dann laß das Betriebssystem seine Arbeit machen. Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:28 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