AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ZLib Speed much slower than ZLibEx

Ein Thema von user69 · begonnen am 1. Okt 2020 · letzter Beitrag vom 6. Mai 2021
Antwort Antwort
Seite 1 von 2  1 2      
user69

Registriert seit: 11. Dez 2004
107 Beiträge
 
#1

ZLib Speed much slower than ZLibEx

  Alt 1. Okt 2020, 21:58
Hallo Gemeinde,

mir ist gerade aufgefallen, das die ZLib die mit Delphi kommt extrem langsamer ist, als die ZLibEx. Bei meinen Test der Faktor 4-5. (bei D10 Sydney und auch bei Berlin). Somit muss ich wohl auf die ZLibEx zurück gehen.

Hat das auch schon wer beobachtet oder ne idee woran es liegen kann?
Kann es evtl. sein, dass es daran liegt dass ich aus dem komprimieren nicht nen ganzen Block lese, sondern Datensatz per Datensatz (also ganz viele kleine stücke) und die ZLibEx besser cached?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: ZLib Speed much slower than ZLibEx

  Alt 2. Okt 2020, 02:00
Erstmal kommt es drauf an wie du das benutzt.
mit Streams, DynArrays oder auf einem statischen Buffer, also ob die Funktionen direkt oder mit noch was dazwischen ... teilweise sind die Funktionen schon bissl "ungünstig" aufgebaut.

Ansonsten kann Embarcadero nicht direkt etwas für das Tempo.
Hier wird ein vorkompilierter Fremdcode benutzt, von dem ich jetzt aber nicht direkt sagen kann auswelcher Quelle das kommt und in welcher Version (vermutlich aber nicht sehr aktuell)

OK, vor 2 Jahren wurde das mal wieder aktualisiert.
Zlib 1.2.11 am 2018-07-05, wobei das zumindestens der aktuelle Code ist, welcher auch schonwieder 3 Jahre alt ist (2017 laut Wiki),
was aber nichts drüber aussagt wie das kompiliert wurde.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 2. Okt 2020 um 02:28 Uhr)
  Mit Zitat antworten Zitat
user69

Registriert seit: 11. Dez 2004
107 Beiträge
 
#3

AW: ZLib Speed much slower than ZLibEx

  Alt 2. Okt 2020, 13:15
Also ich verwende Stream.

Zusätzlich habe ich noch etwas probiert - leider ohne finalen Erfolg
- Die obj Files der ZLib zwischen Delphi ZLib und ZLib Ex unterscheiden sich in der Größe (ca. 50%) und sind nicht kompatibel (Die Version ist bei beiden 1.2.11)
- die 1.2.11 ZLib ist genauso schnell, wie die 1.2.8
- Eine angepasste ZLib für 1.2.11 ist hier zu finden: https://github.com/ValtsS/Delphi-ZlibEx (leider nur OBJ files für 32 bit)

Kann mir jemand die OBJ files für 64 bit erstellen (die zur ZLib 1.2.11 passen)? Da ich nur Delphi habe kann ich auf BCC32/64 nicht zugreifen.
Oder eine Link posten?

Da ich nicht recht rausfinde, warum die Delphi Version so langsam ist muss ich da eher aufgeben und einfach die ZLibEx nutzen.

Vielen Dank.

Geändert von user69 ( 2. Okt 2020 um 15:11 Uhr)
  Mit Zitat antworten Zitat
user69

Registriert seit: 11. Dez 2004
107 Beiträge
 
#4

AW: ZLib Speed much slower than ZLibEx

  Alt 5. Mai 2021, 22:15
Ich will das Thema noch mal mit nem Demo mit StopWatch (siehe attached) aufwärmen ... (bitte erst einmal Write nutzen vor nem Read)

Ich schreibe/lese ne Menge kleine Daten - hier mal als ein 160 MB File.
Dabei zeigt sich dass die ZLib gegen ZLibEx beim schrieben 2 mal so langsam ist. Beim Lesen sogar 10 mal so langsam.

Die Version bei ZLib ist neuer und ZLibEx wird auch wohl nicht mehr gewartet. Deshalb wollt ich ja umsteigen.
Aber bei dem Speed geht das nicht.

Kann das an dem Cache von ZLibEx liegen oder sind die Delphi zlib obj Files schlecht erstellt.
Angehängte Dateien
Dateityp: zip _zlibIssue.zip (121,2 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: ZLib Speed much slower than ZLibEx

  Alt 5. Mai 2021, 23:41
Auch schon benchmarks vs zip durchgeführt?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: ZLib Speed much slower than ZLibEx

  Alt 6. Mai 2021, 02:53
Die ZIP-Klasse im Delphi benutzt auch nur die ZLib-Unit.

Man kann auch die DLL von 7-Zip verwenden, wo auch ein ZIP / ZLib oder ZLibEx drin ist.
Aber k.A. wie schnell/aktuell deren Implementierung ist. (könnte man in den Sourcen nachsehn, wenn man Langeweile hat)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
user69

Registriert seit: 11. Dez 2004
107 Beiträge
 
#7

AW: ZLib Speed much slower than ZLibEx

  Alt 6. Mai 2021, 08:22
ZIP hab ich nicht weiter getestet - ich nutz die gzip Komprimierung on the fly während dem Speichern und Laden.
Eine DLL kommt leider für meinen Einsatz nicht in Frage.

Ich vermute auch das in 64bit folgende ZLibEx.pas Zeile Probleme macht:

Move(Pointer(Integer(param^.InBuffer) + param^.InPosition)^, buffer, result); //in ZBufferRead

Müsste das nicht eher zu NativeInt geändert werden um 64 bit kompatibel zu sein?

Move(Pointer(NativeInt(param^.InBuffer) + param^.InPosition)^, buffer, result);
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: ZLib Speed much slower than ZLibEx

  Alt 6. Mai 2021, 08:28
Ja.

Oder weglassen?
-> Direkt nach Pointer casten.

Ups, bei den Klammern verrutscht.

Wenn Pointer-Arithmetik aktiv ist (könnte aber jemand so unnett sein und es deaktivieren), dann kann man z.B. auch PByte für solche Casts benutzen.


Es müsste auch eine .O .OBJ geben, bzw. die sollte man sich aus den Quellcodes kompilieren können,
welche sich dann wie ZLib/RegEx/JPeg/... ins Delphi einkompilieren liese. (wenn jemand so schlau ist und die passende ImportUnit dafür schreiben kann)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 6. Mai 2021 um 13:12 Uhr)
  Mit Zitat antworten Zitat
user69

Registriert seit: 11. Dez 2004
107 Beiträge
 
#9

AW: ZLib Speed much slower than ZLibEx

  Alt 6. Mai 2021, 08:34
>Direkt nach Pointer casten
Wie würde das gehen (wegen der Addition)? Beispiel?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: ZLib Speed much slower than ZLibEx

  Alt 6. Mai 2021, 08:36
War ein Denk-/Guckfehler.
Hatte es grade oben im Post nochmal berichtig.

Ja, würde gehen, aber nur mit einem Typen, der hierfür 1 Byte groß sind.
z.B. PByte


Würde das Offset z.B. 4 sein, also p+x*4, dann wäre auch ein 4 Byte-Typ OK und dann das *4 weglassen, weil es implizit über den Typ vom Compiler rein kommt.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 6. Mai 2021 um 08:40 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:19 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