Forum: Win32/Win64 API (native code)
by Daniel,
4. Jan 2017
Möglicherweise musst Du Dich noch mit dem Windows Dateicache auseinandersetzen. Ein und derselbe Code habe hier auf dem System zeigt höchst unterschiedliche Laufzeiten. Die 500 Mbytes benötigen zwischen 1.6 und 8 Sekunden, um ihren Weg auf die Platte zu finden.
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils, System.Classes,
System.Diagnostics;
Forum: Win32/Win64 API (native code)
by Daniel,
4. Jan 2017
Wo genau willst Du hin?
Du möchtest offenbar ein bestimmtes Byte vielfach in eine Datei schreiben?
Über welche Größenordnung an Dateigröße reden wir konkret? Bislang war in Deinem ersten Beitrag von Kilobytes die Rede.
Über welche Anforderungen an das Zeitverhalten reden wir? Bei "mehreren GB pro Sekunde" reden wir langsam auch von Hardwarefragen.
Forum: Win32/Win64 API (native code)
by Daniel,
4. Jan 2017
Bist Du sicher, dass ein String das rechte Werkzeug zur Datenhaltung ist? Du baust den ja Zeichen für Zeichen auf. Das arme Ding wird im Speicher kreuz und quer kopiert. Wenn es unbedingt ein String bleiben soll, dann setze dessen Länge einmalig am Anfang und setze die einzelnen Zeichen dann über deren Index (ala s := 'X'; ).
Forum: Win32/Win64 API (native code)
by Daniel,
4. Jan 2017
Kilobytes oder auch eine Handvoll Megabytes kannst Du im Speicher vorbereiten und dann in einem Rutsch auf die Platte schreiben.
Im einfachsten Fall ein Array of Bytes btw. TArray<Byte> oder meinetwegen ein MemoryStream.
Alternativ gäbe es auch den "System.Classes.TBufferedFileStream", der genau dazu da ist, nacheinander viele kleine Dinge wegzuschreiben.