AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) TFileStream.Write langsam, wenn man nur 1 Zeichen schreibt?
Thema durchsuchen
Ansicht
Themen-Optionen

TFileStream.Write langsam, wenn man nur 1 Zeichen schreibt?

Ein Thema von a.def · begonnen am 4. Jan 2017 · letzter Beitrag vom 6. Jan 2017
Antwort Antwort
a.def
(Gast)

n/a Beiträge
 
#1

AW: TFileStream.Write langsam, wenn man nur 1 Zeichen schreibt?

  Alt 4. Jan 2017, 18:56
Danke für die Idee! Geht schon deutlich schneller.

Mein "Kot"
Delphi-Quellcode:
       iFileSizeToWrite := 15728640; // 15 MB
       aFileStream := TFileStream.Create('C:\test.txt', fmCreate or fmOpenWrite);

       try
        iBytesCounter := 0;
        repeat
         sTmp := '';
         for j := 1 to (1024 * 1024) do // 1 MB pro Durchgang
          begin
           sTmp := sTmp + 'X';
           Dec(iFileSizeToWrite);
           if iFileSizeToWrite = 0 then
            Break;
          end;

         aFileStream.Write(PChar(sTmp)^, Length(sTmp));
        until iFileSizeToWrite = 0;
       finally
        aFileStream.Free;
       end;
Ob das noch schneller ginge?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: TFileStream.Write langsam, wenn man nur 1 Zeichen schreibt?

  Alt 4. Jan 2017, 18:57
Zitat:
Mein "Kot"
OT:

Macht der irgendwo hin?
Zumindest sehe ich keine Fäkalien.

gruss

Geändert von EWeiss ( 4. Jan 2017 um 18:59 Uhr)
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TFileStream.Write langsam, wenn man nur 1 Zeichen schreibt?

  Alt 4. Jan 2017, 19:01
Ob das noch schneller ginge?
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[1] := 'X'; ).
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#4

AW: TFileStream.Write langsam, wenn man nur 1 Zeichen schreibt?

  Alt 4. Jan 2017, 19:07
Zitat:
Mein "Kot"
OT:

Macht der irgendwo hin?
Zumindest sehe ich keine Fäkalien.

gruss
Ich dachte ich nenne es "Kot", da es definitiv keiner guter Code ist


Ob das noch schneller ginge?
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[1] := 'X'; ).
Ok ein kleiner Test. Mit meinem... Code... da oben: 512MB in ~7,3 Sekunden. Mit einem array of string ~17 Sekunden.
Mit sTmp: string; SetLength(sTmp, XYZ); sTmp[1] := 'X'; bekomme ich leider eine AV.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: TFileStream.Write langsam, wenn man nur 1 Zeichen schreibt?

  Alt 4. Jan 2017, 19:09
Zitat:
Ich dachte ich nenne es "Kot", da es definitiv keiner guter Code ist
Tja dann ist es berechtigt
War auch nur ein joke

gruss
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#6

AW: TFileStream.Write langsam, wenn man nur 1 Zeichen schreibt?

  Alt 4. Jan 2017, 19:21
Ich habe gerade ein Programm getestet, dass mehrere GB in wenigen Sekunden auf die Platte schreibt
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TFileStream.Write langsam, wenn man nur 1 Zeichen schreibt?

  Alt 4. Jan 2017, 19:25
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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#8

AW: TFileStream.Write langsam, wenn man nur 1 Zeichen schreibt?

  Alt 4. Jan 2017, 19:28
Stimmt das sollte ich mal klären.
Es kann um Dateigrößen von Bytes bis GBytes gehen. Je nachdem was man angibt.
Das sollen eigentlich nur dummy-Dateien werden. Den Inhalt kann man ebenfalls bestimmen. Entweder ein zufälliges Zeichen oder ein definiertes Zeichen.

Ich bin schon so weit, dass alles korrekt arbeitet. Nur 7 Sekunden für 512 MB auf eine SSD ist ein wenig happig

P.S.: das Tool, das mehrere GB pro Sekunde schreibt, das war auf meinem PC

Geändert von a.def ( 4. Jan 2017 um 19:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: TFileStream.Write langsam, wenn man nur 1 Zeichen schreibt?

  Alt 4. Jan 2017, 22:28
Warum füllst Du bei jedem Schreibvorgang den Buffer erneut mit 'A' ?

Sag doch mal was Du erreichen willst.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:00 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