AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TFileStringList + TTextStream
Thema durchsuchen
Ansicht
Themen-Optionen

TFileStringList + TTextStream

Ein Thema von himitsu · begonnen am 7. Jun 2010 · letzter Beitrag vom 7. Jun 2010
 
Benutzerbild von himitsu
himitsu

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

AW: TFileStringList + TTextStream

  Alt 7. Jun 2010, 10:46
Da neuerdings der Post #1 auf allen Seiten sichtbar ist ...
hier noch eine überlange Liste mit Testergebnissen.

Gut, abgesehn von reinen Unicodedateien, wo die Geschwindigkeit vergleichbar mit einer TStringList war, ist halbsoschnell garnichtmal so schlecht, wenn ich bedenke welcher Verwaltungsakt intern von statten geht und was die 1000 MB kleine Datei angeht ... ab ca. 200 MB reicht der RAM für eine TStringList kaum noch aus.
Mal sehn wie es sich zeitmäßig macht, wenn den internen TFileStringList-Lese-/Schreibcode komplett auf TTextStream umgestellt hab.
(Aber erstmal schauen ob TTextStream nun inzwischen wirklich fehlerfrei arbeitet)

Aktuell geht es auch erstmal um Funktionstests, als falls noch jemand Fehler entdeckt, welche mir entgangen sind.

Die TFileStringList wird auch noch etwas umgebaut, so daß dort intern dann auch der TTextStream verwendet wird.

Code:
----- 52.428 Zeilen - 1 MB Unicode -----
create TStringList: 16

TStringList.LoadFromFile: 16 (mem:2.411.792 max:4.640.072)

TTextStreamEx.ReadLine: 16 (max:680.696)

TFileStringList.LoadFromFile: 31 (mem:16.148.244 max:16.181.200)
TFileStringList.AssignToFile: 16 (mem:14.680.316 max:14.713.208)
(memory for index = 14.680.064 = 524.288 entries * 28)

Memory-Load: start=9.600 end=9.568


----- 524.288 Zeilen - 10 MB Unicode -----
create TStringList: 250

TStringList.LoadFromFile: 109 (mem:23.461.984 max:44.564.632)

TTextStreamEx.ReadLine: 297 (max:807.948)

TFileStringList.LoadFromFile: 328 (mem:29.360.324 max:29.393.280)
TFileStringList.AssignToFile: 281 (mem:14.680.316 max:14.713.208)
(memory for index = 14.680.064 = 524.288 entries * 28)

Memory-Load: start=9.600 end=10.592


----- 5.242.880 Zeilen - 100 MB Unicode -----
create TStringList: 2.938

TStringList.LoadFromFile: 1.266 (mem:243.269.728 max:453.116.056)

TTextStreamEx.ReadLine: 2.953 (max:807.948)

TFileStringList.LoadFromFile: 3.312 (mem:161.480.900 max:161.513.856)
TFileStringList.AssignToFile: 2.922 (mem:14.680.316 max:14.713.208)
(memory for index = 14.680.064 = 524.288 entries * 28)

Memory-Load: start=9.600 end=11.440


----- 10.485.760 Zeilen - 200 MB Unicode -----
create TStringList: 6.062

TStringList.LoadFromFile: 2.610 (mem:483.983.456 max:903.544.984)

TTextStreamEx.ReadLine: 5.891 (max:807.948)

TFileStringList.LoadFromFile: 6.547 (mem:308.281.540 max:308.314.496)
TFileStringList.AssignToFile: 5.907 (mem:14.680.316 max:14.713.208)
(memory for index = 14.680.064 = 524.288 entries * 28)

Memory-Load: start=9.600 end=12.400


----- 104.857 Zeilen - 1 MB Ansi -----
create TStringList: 93

TStringList.LoadFromFile: 32 (mem:4.889.060 max:8.165.916)

TTextStreamEx.ReadLine: 47 (max:505.912)

TFileStringList.LoadFromFile: 62 (mem:16.777.400 max:16.810.364)
TFileStringList.AssignToFile: 62 (mem:14.680.316 max:14.713.208)
(memory for index = 14.680.064 = 524.288 entries * 28)

Memory-Load: start=9.600 end=13.172


----- 1.048.576 Zeilen - 10 MB Ansi -----
create TStringList: 390

TStringList.LoadFromFile: 219 (mem:46.792.800 max:78.381.208)

TTextStreamEx.ReadLine: 375 (max:495.092)

TFileStringList.LoadFromFile: 718 (mem:35.651.780 max:35.684.744)
TFileStringList.AssignToFile: 625 (mem:14.680.316 max:14.713.208)
(memory for index = 14.680.064 = 524.288 entries * 28)

Memory-Load: start=9.600 end=13.940


----- 10.485.760 Zeilen - 100 MB Ansi -----
create TStringList: 4.515

TStringList.LoadFromFile: 2.484 (mem:483.983.456 max:798.687.384)

TTextStreamEx.ReadLine: 3.703 (max:510.520)

TFileStringList.LoadFromFile: 7.297 (mem:224.395.460 max:224.428.424)
TFileStringList.AssignToFile: 6.297 (mem:14.680.316 max:14.713.208)
(memory for index = 14.680.064 = 524.288 entries * 28)

Memory-Load: start=9.600 end=14.708


----- 104.857.600 Zeilen - 1000 MB Ansi -----
create TStringList: 37.359

TStringList.LoadFromFile: -1 (mem:-1 max:-1)

TTextStreamEx.ReadLine: 36.797 (max:508.984)

TFileStringList.LoadFromFile: 490.360 (mem:98.566.240 max:350.257.600)
TFileStringList.AssignToFile: 72.219 (mem:14.680.316 max:14.713.208)
(memory for index = 14.680.064 = 524.288 entries * 28)

Memory-Load: start=9.600 end=15.476
PS: der wachsende Memory-Load ist kein Speicherleck ... das ist nur der hier aufgeführte Text mit den Ergebnissen.

> LoadFromFile läd den Inhalt der Datei in die vorhandene StringListe
> AssignToFile verknüpft nur die Datei mit der Stringliste
Weswegen bei Ersterem auch soviel Speicher verbraucht wird.

PSS: für einen vollständigen Testlauf bräuchte man auf der Systempartition noch gut 3-4 GB an freiem Speicher, für den Index und die Tempdatei.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 7. Jun 2010 um 10:54 Uhr)
  Mit Zitat antworten Zitat
 


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 13:27 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