Często muszę kompresować pliki, które są do siebie bardzo podobne.
Obecnie używam 7Zip, który kompresuje plik 16 GB do 1,2 GB w około 35 minut przy użyciu 8 rdzeni z ustawieniami Ultra.
Wydaje mi się, że większość tego czasu spędza na obliczaniu słownika w celu kompresji. Ponieważ pliki są bardzo podobne, faktycznie używany słownik jest prawdopodobnie podobny.
Czy istnieje narzędzie do kompresji oparte na systemie Windows (7Zip z opcją, której nie znam, lub inne narzędzie), które może zapisać słownik i ponownie użyć zapisanego słownika do kolejnych plików?
Czy istnieje lepszy sposób na rozwiązanie problemu utrzymania współczynnika kompresji podobnego do tego, który mam, przy kompresji znacznie szybciej?
źródło
W przeciwieństwie do algorytmu DEFLATE, LZMA 7-Zip domyślnie stosuje solidną kompresję, która wykorzystuje redundancję między plikami. Będzie to działać z ustawieniami domyślnymi, o ile pliki będą wystarczająco małe.
Przy domyślnych ustawieniach 2 GB dla rozmiaru Solid Block plik 16 GB jest tak naprawdę kompresowany jako 8 oddzielnych porcji.
Jak już powiedział @Breakthorugh, słownik jest generowany w locie. Możesz to zweryfikować empirycznie, ustawiając rozmiar Solid Block na Solid (kompresuj wszystkie pliki jednocześnie) i Non-solid (kompresuj każdy plik osobno).
Zwiększenie rozmiaru bloku bryłowego spowoduje spowolnienie, ale może skutkować znacznie lepszym współczynnikiem kompresji. Na przykład kompresja dwóch identycznych plików spowoduje, że archiwum będzie prawie dwa razy większe z kompresją niestałą.
źródło