AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TFileStream Read

Ein Thema von MicMic · begonnen am 1. Feb 2020 · letzter Beitrag vom 7. Feb 2020
Antwort Antwort
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

TFileStream Read

  Alt 1. Feb 2020, 19:15
Delphi-Version: 10.3 Rio
Hallo,

was wäre denn schneller?

20 x TFileStream.Read(Daten,10)

oder

TFileStream.Read(Daten,200)

zu lesen?

Ich habe gerade obige Variante, da ich in "Daten" natürlich auch was suche. Bei der unteren Variante müsste ich dann natürlich noch schauen, wie ich am Besten in "Daten" mein Zeug suche. Natürlich sollte hier die Verarbeitung nicht ausbremsen Jedenfalls bezieht sich dieses Beispiel auf eine Datei und ich muss ggf. hunderte so lesen können.

"Daten" wäre hier (für obige Variante) ein Record mit 10 Bytes und natürlich kann man so, schön und einfach die gelesenen Bytes durchsuchen.

Gruß
Michael

Edit:
P.s. Ist sind nicht immer x 20
Mal weniger, mal mehr

Geändert von MicMic ( 1. Feb 2020 um 19:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: TFileStream Read

  Alt 1. Feb 2020, 19:48
Mehrmals Daten lesen ist immer langsamer als einmal. Es könnte sein, daß der Unterschied minimal ist aber er ist vorhanden.

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

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: TFileStream Read

  Alt 1. Feb 2020, 20:24
Du musst abwägen. Wenn es einfacher ist die Datensätze einzeln zu lesen, dann würde ich das auch machen. Das macht eventuell auch den Code einfacher.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

AW: TFileStream Read

  Alt 1. Feb 2020, 22:19
Es lohnt sich wahrscheinlich nicht, Blöcke kleiner als 4KB zu lesen. (Sektorgröße aktueller SSDs)

Wenn du 10 Bytes anforderst, sendet die SSD wahrscheinlich 4096 bytes und es werden irgendwo 4086 Bytes weggeworfen oder in den Cache gelegt für den nächsten Zugriff.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
42.982 Beiträge
 
Delphi 12 Athens
 
#5

AW: TFileStream Read

  Alt 1. Feb 2020, 23:53
Ich glaub die Blöcke in Windows File Cache sind 256 KB groß.
Dass heißt Windows liest so oder so das erstmal in den Cache, bevor du daraus eine Kopie bekommst.

Und ob 20*10 oder 200, das ist somit alles schon im FileCache und die HDD ist egal.
Nun kommt es also nur noch auf die Anzahl deiner Zugriffe an und da ist 1 Mal natürlich schneller als 20 Mal.

Bei diesen winzigen Mengen und Anzahlen wären ansonsten sämtliche Optimierungen bezüglich Zugriffe auf HDD und Cache sinnlos.
z.B. MSDN-Library durchsuchenFILE_FLAG_NO_BUFFERING

Fazit: Scheibe deinen Code, so dass er schön und wartbar wird und mach dir sonst keine Gedanken darüber,
so lange es nicht um Millionen Zugriffe und Milliarden von Bytes geht.


Wenn es einfach ist, dann lies mehreres 1 Mal in einen eigenen Puffer und verarbeite den Puffer/Array dann
und ansonsten einfach eins nach dem Anderen kopieren und verarbeiten.


Erfahrungswerte: "sehr oft" weniger als 8 KB zu lesen macht kaum sinn, besser in Schritten/Mehrfachem von 64 KB, was auch der Speicherverwaltung im RAM entspricht. (VirtualAlloc: 64 KB Reservierungseinheiten in Teileinheiten von 8 KB)
Sektorgröße 512 Byte, bzw. bei neueren HDDs "nativ" 4 KB, auch wenn sie oft dem System den Zugriff auf 512 KB gewähren (weil immernoch einige Treiber/Programme zu doof sind und dann abkratzen, wenn es nicht genau 512 sind), oder wirklich die 4 KB Sektoren nativ rausgeben. (bei CD und DVD sind es auch um die 4 KB)
Joar, und SSD, SD-Card usw. oft 4 KB Speicher, aber beim Speicher das auch wieder geclustert (die Löschfunktion, für Neubeschreiben).
Die Partitionen sind dann aber im Dateisystemtreiber auch nochmal in Cluster aus mehreren Sektoren aufgeteilt ... oft 4 KB bis 64 KB
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 2. Feb 2020 um 00:15 Uhr)
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: TFileStream Read

  Alt 7. Feb 2020, 23:29
Danke noch für die vielen Infos.
Gruß Mike
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz