Ich habe es so versucht, jedoch ohne Erfolg beim umstellen des SetCompressionLevel, da ich daran schon scheitere habe ich die weiteren features nicht weiter angerührt.
Ich habe es mit der 32-Bit Version 22.01 der
7za.dll getestet. Wenn die
DLL im Programmverzeichnis liegt, gebe keinen Bibliothekspfad an, mORMot sucht sie. Laut dieser
Beschreibung sind für den CompressionLevel die Werte 1/3/5/7/9 zulässig. Bei mir funktioniert es. Du darfst es nicht mit den synthetischen Random-Testdaten versuchen, damit ist ab einem gewissen Level jeder Algorithmus überfordert.
Delphi-Quellcode:
var
zipFileName: TFileName;
libReader: I7zReader;
libWriter: I7zWriter;
content: RawByteString;
begin
content := StringFromFile(MakePath([Executable.ProgramFilePath, 'mormot.lib.openssl11.pas']));
zipFileName := MakePath([Executable.ProgramFilePath, 'TestDaten.7z']);
libWriter := New7zWriter(fh7z);
libWriter.SetCompressionLevel(7); // x Parameter (1/3/5/7/9)
libWriter.AddBuffer('Lib\mormot.lib.openssl11.pas', content);
libWriter.SaveToFile(zipFileName);
libWriter := Nil;
libReader := New7zReader(zipFileName);
var libData: RawByteString := libReader.Extract('Lib\mormot.lib.openssl11.pas');
if (Length(content) = Length(libData))
and CompareMem(Pointer(content), Pointer(libData), Length(content)) then
begin
ShowMessage('Ok!');
end;
Benchmark-Werte:
Level | Dateigröße | Laufzeit [ms] |
Original | 340.019 | |
1 | 54.035 | 11 |
3 | 53.742 | 11 |
5 | 48.811 | 35 |
7 | 47.959 | 42 |
9 | 47.959 | 42 |
Bis bald...
Thomas