Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi File IO mit dem Windows-API? (https://www.delphipraxis.net/115006-file-io-mit-dem-windows-api.html)

HHick123 12. Jun 2008 14:25

Re: File IO mit dem Windows-API?
 
Liste der Anhänge anzeigen (Anzahl: 4)
So, jetzt hab' ich 's ausprobiert: Habe die oben gepostete Klasse TSeqFileStream in die weiter oben gepostete Unit MyFastFile.pas eingebaut (MySeqFastFile.pas) und mit PerformanceCounter (MyDebugTiming.pas) Zeitmessungen bei verschiedenen Filegrößen gemacht (Projekt anbei).

Tja. Leider noch kein Durchbruch....:
  • (2ms) MyFastFile.pas (200 byte)- schreiben
    (2ms) MySeqFastFile.pas (200 byte)- schreiben
    (0ms) MyFastFile.pas (200 byte)- lesen
    (0ms) MySeqFastFile.pas (200 byte)- lesen
    (2ms) MyFastFile.pas (2000 byte)- schreiben
    (3ms) MySeqFastFile.pas (2000 byte)- schreiben
    (0ms) MyFastFile.pas (2000 byte)- lesen
    (0ms) MySeqFastFile.pas (2000 byte)- lesen
    (4ms) MyFastFile.pas (20000 byte)- schreiben
    (4ms) MySeqFastFile.pas (20000 byte)- schreiben
    (0ms) MyFastFile.pas (20000 byte)- lesen
    (1ms) MySeqFastFile.pas (20000 byte)- lesen
    (13ms) MyFastFile.pas (200000 byte)- schreiben
    (13ms) MySeqFastFile.pas (200000 byte)- schreiben
    (3ms) MyFastFile.pas (200000 byte)- lesen
    (6ms) MySeqFastFile.pas (200000 byte)- lesen
    (95ms) MyFastFile.pas (2000000 byte)- schreiben
    (99ms) MySeqFastFile.pas (2000000 byte)- schreiben
    (30ms) MyFastFile.pas (2000000 byte)- lesen
    (53ms) MySeqFastFile.pas (2000000 byte)- lesen
    (1245ms) MyFastFile.pas (20000000 byte)- schreiben
    (965ms) MySeqFastFile.pas (20000000 byte)- schreiben
    (305ms) MyFastFile.pas (20000000 byte)- lesen
    (536ms) MySeqFastFile.pas (20000000 byte)- lesen
    (10259ms) MyFastFile.pas (200000000 byte)- schreiben
    (9314ms) MySeqFastFile.pas (200000000 byte)- schreiben
    (12835ms) MyFastFile.pas (200000000 byte)- lesen
    (19656ms) MySeqFastFile.pas (200000000 byte)- lesen
Meist ist TSeqFileStream sogar etwas langsamer...
Hmm...

Viele Grüße,
Helmut

himitsu 12. Jun 2008 14:39

Re: File IO mit dem Windows-API?
 
hast du mal einen Speedtest deiner Festplatte gemacht?

Zitat:

(12835ms) MyFastFile.pas (200000000 byte)- lesen
sind ja auch immerhin schonmal fast 15 MB/s


diese Woche wird es nichts mehr (keine Zeit), aber ich könnte in den nächten 1-2 Wochen man versuchen eine NonBuffered-Variante mit eigener Cache (von TSeqFileStream) zu basteln.
(weiß ja nicht, ob's dir helfen würde, mal in meine alten Hier im Forum suchenFileSplitter-QuellCodes rein zu gucken)

HHick123 12. Jun 2008 16:31

Re: File IO mit dem Windows-API?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

hast du mal einen Speedtest deiner Festplatte gemacht?
Hab' grad einen Test mit hdtune gemacht (screenshot anbei), wobei da die eine Achsenbeschriftung leider fehlt (ich nehme an, es ist die Puffergröße in kB?).
Jedenfalls ab 32 (kB?) aufwärts liegt es etwa bei 35 MB/s bei Filegröße von 256 MB (auch bei 128MB).

Zitat:

Zitat:

(12835ms) MyFastFile.pas (200000000 byte)- lesen
sind ja auch immerhin schonmal fast 15 MB/s
Tja, so schlecht ist es ja eigentlich eh' nicht. Was ich mir gut vorstellen könnte, ist, dass mich die vielen Funktionsaufrufe (für jedes SmallInt einer) ausbremsen. :gruebel:

Zitat:

diese Woche wird es nichts mehr (keine Zeit), aber ich könnte in den nächten 1-2 Wochen man versuchen eine NonBuffered-Variante mit eigener Cache (von TSeqFileStream) zu basteln.
Wär natürlich super, und würd' mich sehr interessieren! Aber mach' Dir keinen Stress..., das Thema hier im Thread eilt eigentlich überhaupt nicht...

Zitat:

(weiß ja nicht, ob's dir helfen würde, mal in meine alten FileSplitter -QuellCodes rein zu gucken)
Werd' ich machen!

Viele Grüße, Helmut

HHick123 26. Jun 2008 18:42

Re: File IO mit dem Windows-API?
 
Zitat:

Funktionsaufrufe (für jedes SmallInt einer) ausbremsen.
Die Funktionsaufrufe scheinen es nicht zu sein, was ich dadurch gecheckt hab, dass ich die Funktionalität in der Funktion weggelassen hab' und mit exit gleich wieder zurückgesprungen bin -> geht dann relativ blitzschnell, ausser der Compiler hat das durchschaut und meine Funktion gleich "wegoptimiert", das könnte natürlich sein....

Vjay 27. Jun 2008 13:33

Re: File IO mit dem Windows-API?
 
Zu deinem Prozessmonitortest ganz am Anfang noch eine Anmerkung: Auch wenn du den Filter auf deine Applikation gesetzt hast, kann es durchaus noch sein, dass du Antivirusausgaben in der Liste hast.
Irgendwie wird ein Antivirus deinen Prozess auch hooken denke ich mal.

HHick123 30. Jun 2008 08:46

Re: File IO mit dem Windows-API?
 
Zitat:

Auch wenn du den Filter auf deine Applikation gesetzt hast, kann es durchaus noch sein, dass du Antivirusausgaben in der Liste hast.
Tja, kann schon sein, werd' mal bei Gelegenheit probieren, den Virenscanner abzuschalten und dann die Zeit messen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:03 Uhr.
Seite 3 von 3     123   

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