AbbreviaZIP - bardzo powolne rozpakowywanie

0

Do obsługi archiwów ZIP w celach rekreacyjnych używam komponentu AbbreviaZIP 5.0 (najnowsza wersja) dla Delphi 7, tyle o ile przy małych plikach co do tempa dekompresji nie mam zastrzeżeń, to już przy plikach +200MB szybkość spada.

Ja wiem, że tempo zależy od rozmiaru pliku i obciążenia procka, ale z ciekawości rozpakowałem testowe archiwum przy pomocy 7zip'a i mojego archivera, mój archiver potrzebował ~36min więcej żeby rozpakować to archiwum o łącznej wadze 1GB.

Początkowo myślałem, że taka różnica jest spowodowana kontrolką AlphaSkins i tymczasowo ją wyłączyłem z apki, ale efekt jest ten sam.

tutaj zamieszczam kod do wypakowywania:

try
  if not (DirectoryExists(install_path)) then
  begin
    ForceDirectories(install_path);
  end
  else
    if AcceptedRules then
    begin
      try
        Unzip.BaseDirectory := install_path;
        try
          Unzip.FileName := 'data';
          try
            Unzip.ArchiveType := atZip;
            try
              sButton1.Enabled := false;
              Unzip.TagItems('*');
              Unzip.ExtractTaggedItems;
            except
              on e:Exception do ShowMessage(GetError);
            end;
          except
            on e:Exception do ShowMessage(GetError);
          end;
        except
          on e:Exception do ShowMessage(GetError);
        end;
      except
        on e:Exception do ShowMessage(GetError);
      end;
    end
    else
      ShowMessage('ACCEPT_RULES');
finally
  ShowMessage('All done');
end;

(Rzecz jasna, mogę użyć ExtractFiles(mask: string); ale chciałem rzucić ten kod na oddzielny wątek)

0

Na pierwszy rzut oka widzę nadmiar try spróbuj taką małą bezmyślną optymalizacje:

  try
    if not (DirectoryExists(install_path)) then
    begin 
      ForceDirectories(install_path);
    end
    else if AcceptedRules then
    begin 
      try
        Unzip.BaseDirectory:=install_path;
        Unzip.FileName:='data';
        Unzip.ArchiveType:=atZip;
        sButton1.Enabled:=false;
        Unzip.TagItems('*');
        Unzip.ExtractTaggedItems;
      except 
        on e:Exception do ShowMessage(GetError); 
      end;
    end 
    else ShowMessage('ACCEPT_RULES');
  finally
    ShowMessage('All done');
  end;
1

@Chuppa nie znam narzędzia o którym piszesz ale dość mocno korzystam z tego:
http://www.delphizip.org/
sprawdź sobie ten ZipMaster na tym samym pliku i daj znać czy jest szybciej

0

Dzięki, w wolnej chwili przejrzę tą kontrolkę, ale już udało mi się ustalić, że winowajcą jest metoda kompresji. Skompresowałem tą paczkę metodą BZip2 i idzie o wiele lepiej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1