AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Komprimiertes Archiv multithreaded erstellen?

Komprimiertes Archiv multithreaded erstellen?

Ein Thema von dummzeuch · begonnen am 15. Nov 2019 · letzter Beitrag vom 16. Nov 2019
Antwort Antwort
Seite 1 von 2  1 2   
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
561 Beiträge
 
Delphi 2007 Professional
 
#1

Komprimiertes Archiv multithreaded erstellen?

  Alt 15. Nov 2019, 18:31
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?
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.498 Beiträge
 
Delphi 7 Personal
 
#2

AW: Komprimiertes Archiv multithreaded erstellen?

  Alt 15. Nov 2019, 19:14
Wie wäre es mit 7Zip? Angeblich (https://de.wikipedia.org/wiki/7-Zip) ist da multithreading möglich.
Auch DLL sind verfügbar (https://forum.lazarus.freepascal.org...?topic=28811.0) und Nein ich habe damit keine praktische Erfahrung. Vielleicht findest Du da was Du suchst.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
562 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Komprimiertes Archiv multithreaded erstellen?

  Alt 15. Nov 2019, 20:13
Du hast gelesen, dass der OP schon die 7zip DLL benutzt?
  Mit Zitat antworten Zitat
Redeemer
Online

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
558 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Komprimiertes Archiv multithreaded erstellen?

  Alt 15. Nov 2019, 20:19
Benutzt du auch LZMA2 als Verfahren?
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.498 Beiträge
 
Delphi 7 Personal
 
#5

AW: Komprimiertes Archiv multithreaded erstellen?

  Alt 15. Nov 2019, 21:20
Du hast gelesen, dass der OP schon die 7zip DLL benutzt?
eh nee, verlesen

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
1.289 Beiträge
 
#6

AW: Komprimiertes Archiv multithreaded erstellen?

  Alt 16. Nov 2019, 11:21
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;

Geändert von DieDolly (16. Nov 2019 um 11:47 Uhr)
  Mit Zitat antworten Zitat
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
561 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Komprimiertes Archiv multithreaded erstellen?

  Alt 16. Nov 2019, 12:44
Bei 7z kann man mehrere Kompressionsthreads so angeben (benötigt JCL)
Cool, hatte ich bisher übersehen. Dann wären die notwendigen Änderungen ja minimal.

Wenn ich das richtig interpretiere, gilt das aber nur für das 7z-Format und nicht für ZIP, korrekt?
Thomas Mueller
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
1.289 Beiträge
 
#8

AW: Komprimiertes Archiv multithreaded erstellen?

  Alt 16. Nov 2019, 12:45
Für ZIP sieht das so aus
Delphi-Quellcode:
if (CompressArchive.ClassType = JclCompression.TJclZipCompressArchive) or (CompressArchive.ClassType = JclCompression.TJclZipUpdateArchive) then
 begin
  (CompressArchive as TJclZipUpdateArchive).SetNumberOfThreads(4);
Gerne würde ich noch mehr helfen. Aber ich bin was JCL/7z angeht leider auch kein Profi.

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:
TJclZipCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/
| |-- TJclBZ2CompressArchive handled by sevenzip http://sevenzip.sourceforge.net/
| |-- TJcl7zCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/
| |-- TJclTarCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/
| |-- TJclGZipCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/
| |-- TJclXzCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/
| |-- TJclSwfcCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/
| |-- TJclWimCompressArchive
Jede hat ihre eigenen Eigenschaften. Welcher Modus was kann, kann man super in der 7z-GUI (neues Archiv) testen.

Kleiner Hinweis noch. http://sevenzip.sourceforge.net/ ist veraltet. die aktuelle URL ist http://sevenzip.sourceforge.net/

Geändert von DieDolly (16. Nov 2019 um 12:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
7.250 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Komprimiertes Archiv multithreaded erstellen?

  Alt 16. Nov 2019, 13:07
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
1.289 Beiträge
 
#10

AW: Komprimiertes Archiv multithreaded erstellen?

  Alt 16. Nov 2019, 13:38
Das nenne ich einen super Fehler von mir.

Ich meine natürlich https://www.7-zip.org/
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf