![]() |
Komprimiertes Archiv multithreaded erstellen?
Wir haben manchmal das Problem, dass wir zusammengehörige Dateien, die unkomprimiert recht gross sind, als komprimiertes Archiv verschicken (bzw. auf einen Server hochladen) muessen.
Bisher erstellen wir ZIP-Dateien und verwenden dazu die 7zip-DLL und das funktioniert auch ganz gut. Leider dauert das Erstellen des Archivs bei großen Dateien extrem lange, weil alles in einem einzelnen Thread läuft. Der Rechner ist ein (echter) 8-Kerner, d.h. durch Multithreading könnte man den Vorgang wahrscheinlich deutlich beschleunigen. Anforderung ist, dass die Erstellung des Archivs aus einem Delphi-Programm heraus angestoßen werden kann. Schön wäre, wenn das nicht per Kommandozeile sondern mittels einer DLL geschähe, so dass man einen Fortschrit in der GUI anzeigen kann. Gibt es da was? |
AW: Komprimiertes Archiv multithreaded erstellen?
Wie wäre es mit 7Zip? Angeblich (
![]() Auch DLL sind verfügbar ( ![]() Gruß K-H |
AW: Komprimiertes Archiv multithreaded erstellen?
Du hast gelesen, dass der OP schon die 7zip DLL benutzt? ;-)
|
AW: Komprimiertes Archiv multithreaded erstellen?
Benutzt du auch LZMA2 als Verfahren?
|
AW: Komprimiertes Archiv multithreaded erstellen?
Zitat:
Gruß K-H |
AW: Komprimiertes Archiv multithreaded erstellen?
Bei 7z kann man mehrere Kompressionsthreads so angeben (benötigt JCL)
Delphi-Quellcode:
CompressFormat := GetArchiveFormats.FindUpdateFormat('datei.7z');
if CompressFormat <> nil then begin if (CompressArchive.ClassType = JclCompression.TJcl7zCompressArchive) or (CompressArchive.ClassType = JclCompression.TJcl7zUpdateArchive) then begin CompressArchive := CompressFormat.Create('datei.7z'); // >>> (CompressArchive as TJcl7zUpdateArchive).SetNumberOfThreads(4); // <<< ........... end; end; |
AW: Komprimiertes Archiv multithreaded erstellen?
Zitat:
Wenn ich das richtig interpretiere, gilt das aber nur für das 7z-Format und nicht für ZIP, korrekt? |
AW: Komprimiertes Archiv multithreaded erstellen?
Für ZIP sieht das so aus
Delphi-Quellcode:
Gerne würde ich noch mehr helfen. Aber ich bin was JCL/7z angeht leider auch kein Profi.
if (CompressArchive.ClassType = JclCompression.TJclZipCompressArchive) or (CompressArchive.ClassType = JclCompression.TJclZipUpdateArchive) then
begin (CompressArchive as TJclZipUpdateArchive).SetNumberOfThreads(4); Was der Delphi-Gemeinschaft enorm helfen würde, wäre ein Tutorial, wie man 7z korrekt und komplett mit JCL verwendet. Insgesamt kann die JCL 7z Implementierung Zitat:
Kleiner Hinweis noch. ![]() ![]() |
AW: Komprimiertes Archiv multithreaded erstellen?
Zitat:
|
AW: Komprimiertes Archiv multithreaded erstellen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:29 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