Einzelnen Beitrag anzeigen

Benutzerbild von Skasch
Skasch

Registriert seit: 14. Nov 2005
4 Beiträge
 
#4

Re: Optimierung einer Deflate-Kompression

  Alt 16. Sep 2008, 20:19
Hi,

nur zur Information hab ich meine Variante der gzip Decompression mal angefügt.
Hierfür benutze ich schlicht und ergreifend die verbesserte version der Borland ZLib von www.dellapasqua.com.

Ein paar Änderungen waren dazu jedoch nötig:

1) Um GZIP-Streams lesen zu können muss das ZLib Object anders initialisiert werden, nämlich so, dass kein Header und keine Adler-Checksum verwendet wird.
Der parameter "windowBits" muss also mit negativem Wert belegt werden und DeflateInit2(..) muss verwendet werden statt DeflateInit(..).
Zur Info: DeflateInit(..) ruft implizit DeflateInit2(..) auf.
2) Die Implementation im original ZLibEx.pas hat kein "rewind" auf den unbenutzten Part des gelesenen streams ausgeführt.
Jetzt schon

Speichern als GZIP ist auch im TZCompressionStream aufgenommen aber bislang ungetestet.

Performance:
Da der Dateilink auf test.tar.bz nicht mehr geht hab ich eine Datei mit ca. 3,5Mb entpackt und komme dann auf max 0,35ms auf nem alten 988MHz Schlepptop.

"jbg" hat schon bemerkt dass die Implementation der AdDeflate.pas ziemlich unwirtschaftlich in Punkto CPU-Costs ist, dem kann ich nur beipflichten.
Der Weg über ZLib ist wohl wesentlich effektiver.

Gruss,

O.
Angehängte Dateien
Dateityp: pas _zlib_488.pas (31,7 KB, 14x aufgerufen)
  Mit Zitat antworten Zitat