169 похожих чатов

Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо

сжимающий) алгоритм
А ещё лучше в pure pascal
А ещё лучше одним *.pas файлом
?

48 ответов

23 просмотра

так слёту только paszlib если прикручивать

notme- Автор вопроса
Alexey Kulakov
так слёту только paszlib если прикручивать

ZLib который(-ая?) в TCompressionStream И Deflate, который как правило в ZIP Это одно и тоже или нет?

notme- Автор вопроса
Alexey Kulakov
так слёту только paszlib если прикручивать

Ага, судя по информации в интернете - что Zip(как правило с алго deflate), что ZLib - это одно и тоже

Зачем тебе такое старье? Штатного zlib за глаза. В дельфе юзается сишный обьектник, в лазаре там да, там тормозная реализация- поэтому у себя в fwzip для лазаря тож обьектники сгенерил

notme- Автор вопроса
notme- Автор вопроса
Александр (Rouse_) Багель
Зачем тебе такое старье? Штатного zlib за глаза. В...

LZ4 - вроде как не сильно в степени компрессии проигрывает, зато выигрывает по времени значительно Zstd - не старьё По скорости - по сравнению с лазаревской реализацией vs твоя

Есть LZW на чистом паскале. Прикрути его к Stream, он уже там есть.

Boris Usievich
А смысл в "чистом" паскале?

бывает что есть смысл, когда нужно что-то править. мы правили для себя

T7zStream из https://github.com/geoffsmith82/d7zip

Михаил Усков
T7zStream из https://github.com/geoffsmith82/d7zip

Иии, вопрос кторый я задавал как то Розычу, по его FWZip - А он сам жмёт?

Евгений
Иии, вопрос кторый я задавал как то Розычу, по его...

черным по зеленому написано "wrapper around 7z.dll"

notme- Автор вопроса
Евгений
Иии, вопрос кторый я задавал как то Розычу, по его...

нет, там же объектники, как он ответил чуть выше

Евгений
Иии, вопрос кторый я задавал как то Розычу, по его...

FWZip это реализация ZIP контейнера, чем жать - ему пофиг. Конкретно щас он жмет zlib-ом, но легко можно подключить любую другую реализацию

Если для сжатия передаваемых данных, то достаточно обычного deflate из zip. Он быстрый и потоковый. А если надо максимум компрессии и времени не жалко, то тут надо к разным видам данных разный подход применять. Для текстов, звуков и картинок есть свои лучшие алгоритмы. Или жать все LZMA из 7zip, он очень долгий, но универсальный.

notme- Автор вопроса
Sergey Bodrov
Если для сжатия передаваемых данных, то достаточно...

для сжатия и быстро TCompressionStream из FPC/Lazarus не так уж и быстр на хорошо сжимаемых данных - он быстр, на плохосжимаемых 350мегов жмёт 9сек плохосжимаемые: for i:=0 to size-1 do if random(5)=0 then buf[i]:=random(255);

notme
для сжатия и быстро TCompressionStream из FPC/Laza...

Там вроде есть уровни компрессии, можно с ними поэкспериментировать. Вроде первый уровень быстрее копировния, но при этом даже жмет

notme- Автор вопроса
notme
для сжатия и быстро TCompressionStream из FPC/Laza...

а дельфевый сколько жмет по времени?

notme
для сжатия и быстро TCompressionStream из FPC/Laza...

Один из самых быстрых - google snappy, но нативной реализации под Паскаль нету. Есть только распаковка, причем которую пилил я давным давно. И есть биндинги к либе, ещё в сети можно нагуглить вариант с смешными объектниками для дельфей, но это старый сишный порт оригинала

notme- Автор вопроса
Александр (Rouse_) Багель
а дельфевый сколько жмет по времени?

#Lazarus #FPC -O4 TCompressionStream (size = 350.00Mb, random_k = 1) time:12.20, Size: 350.11 Mb TCompressionStream (size = 350.00Mb, random_k = 2) time:13.43, Size: 255.88 Mb TCompressionStream (size = 350.00Mb, random_k = 3) time:11.45, Size: 200.83 Mb TCompressionStream (size = 350.00Mb, random_k = 4) time:10.00, Size: 167.88 Mb TCompressionStream (size = 350.00Mb, random_k = 8) time:6.60, Size: 106.68 Mb TCompressionStream (size = 350.00Mb, random_k = 16) time:4.25, Size: 65.28 Mb TCompressionStream (size = 350.00Mb, random_k = 32) time:2.83, Size: 38.45 Mb TCompressionStream (size = 350.00Mb, random_k = 64) time:2.05, Size: 22.10 Mb TCompressionStream (size = 350.00Mb, random_k = 128) time:1.68, Size: 12.69 Mb TCompressionStream (size = 350.00Mb, random_k = 256) time:1.50, Size: 7.50 Mb #Delphi 11 CE x64 Release TCompressionStream (size = 350.00Mb, random_k = 1) time:8.49, Size: 350.11 Mb TCompressionStream (size = 350.00Mb, random_k = 2) time:9.20, Size: 255.90 Mb TCompressionStream (size = 350.00Mb, random_k = 3) time:7.71, Size: 200.84 Mb TCompressionStream (size = 350.00Mb, random_k = 4) time:6.59, Size: 167.90 Mb TCompressionStream (size = 350.00Mb, random_k = 8) time:4.31, Size: 106.68 Mb TCompressionStream (size = 350.00Mb, random_k = 16) time:2.70, Size: 65.28 Mb TCompressionStream (size = 350.00Mb, random_k = 32) time:1.76, Size: 38.46 Mb TCompressionStream (size = 350.00Mb, random_k = 64) time:1.23, Size: 22.08 Mb TCompressionStream (size = 350.00Mb, random_k = 128) time:0.97, Size: 12.69 Mb TCompressionStream (size = 350.00Mb, random_k = 256) time:0.85, Size: 7.50 Mb program Project1; {$mode objfpc}{$h+} // FPC {$APPTYPE CONSOLE} // Delphi uses SysUtils,classes ,System.ZLib // Delphi //,zstream // FPC ; const size = 1024*1024*350; procedure TestTCompressionStream(size, random_koef: integer); var i:integer; mem_source: pbyte; ms,cs:tstream; t:Double; begin getmem(mem_source, size); FillChar(mem_source^, size, 0); for i:=size-1 downto 0 do if random(random_koef)=0 then mem_source[i]:=Random(255); ms := TMemoryStream.Create; cs := TCompressionStream.Create(clfastest, ms); t:=Now; cs.Write(mem_source^, size); cs.Free; WriteLn('TCompressionStream (size = ', size/1024/1024:0:2,'Mb', ', random_k = ',random_koef, ') time:',(Now-t)*SecsPerDay:0:2, ', Size: ',ms.Size/1024/1024:0:2,' Mb' ); ms.Free; Freemem(mem_source); end; begin TestTCompressionStream(size, 1); TestTCompressionStream(size, 2); TestTCompressionStream(size, 3); TestTCompressionStream(size, 4); TestTCompressionStream(size, 8); TestTCompressionStream(size, 16); TestTCompressionStream(size, 32); TestTCompressionStream(size, 64); TestTCompressionStream(size, 128); TestTCompressionStream(size, 256); WriteLn('Done...'); ReadLn; end.

notme
#Lazarus #FPC -O4 TCompressionStream (size = 350.0...

ну возьми вот этот стрим и проверь https://github.com/AlexanderBagel/FWZip/blob/master/FWZipZLib.pas

notme- Автор вопроса
Александр (Rouse_) Багель
ну возьми вот этот стрим и проверь https://github....

там объектники у тебя, я хотел на pure pascal Да ладно уже, пуст как будет - так и будет

notme
там объектники у тебя, я хотел на pure pascal Да л...

т.е. обьектники в дельфи тебя не смущают? :)))))))

notme- Автор вопроса
Александр (Rouse_) Багель
т.е. обьектники в дельфи тебя не смущают? :)))))))

неа ) они без делфи не существуют отдельно, есть делфи - есть объектники я люблю когда либо из коробки, либо файлов мало, внешних зависимостей

notme- Автор вопроса
notme
Макаронный монстр

Я тебе просто по своему опыту скажу что коробочное что в дельфе что в лазаре мало что юзабельно на дистанции, соответственно именно поэтому я почти на все аналоги написал которые работают правильно

notme- Автор вопроса
notme
#Lazarus #FPC -O4 TCompressionStream (size = 350.0...

Вот это я понимаю! TZstdAlgoCompression (size = 350.00Mb, random_k = 1) time:0.16, Size: 350.01 Mb TZstdAlgoCompression (size = 350.00Mb, random_k = 2) time:1.08, Size: 224.57 Mb TZstdAlgoCompression (size = 350.00Mb, random_k = 3) time:1.27, Size: 176.09 Mb TZstdAlgoCompression (size = 350.00Mb, random_k = 4) time:1.34, Size: 148.10 Mb TZstdAlgoCompression (size = 350.00Mb, random_k = 8) time:1.27, Size: 93.22 Mb TZstdAlgoCompression (size = 350.00Mb, random_k = 16) time:1.00, Size: 54.52 Mb TZstdAlgoCompression (size = 350.00Mb, random_k = 32) time:0.65, Size: 30.34 Mb TZstdAlgoCompression (size = 350.00Mb, random_k = 64) time:0.39, Size: 16.51 Mb TZstdAlgoCompression (size = 350.00Mb, random_k = 128) time:0.24, Size: 8.90 Mb TZstdAlgoCompression (size = 350.00Mb, random_k = 256) time:0.16, Size: 4.82 Mb

notme- Автор вопроса
notme- Автор вопроса
Alexey Kulakov
на туфту похоже

ну и живи с zipper.pp или как там его ) а я буду с Zstd Ещё и жмёт лучше! И это на самом минимальном уровне компрессии

notme
ну и живи с zipper.pp или как там его ) а я буду с...

зиппер из коробки, хоть он мне и не нравится. и трахаться с объектниками Сишными я не люблю. и длл дополнительную не хочется

notme- Автор вопроса
Alexey Kulakov
зиппер из коробки, хоть он мне и не нравится. и тр...

ну я по началу тоже так хотел но на одном из случаев я сдался, не хочу ждать, если можно небольшим усилием всё ускорить в 10 раз

notme
ну я по началу тоже так хотел но на одном из случа...

распаковывает теперь ок, упаковка мне, к счастью, некритична. Значит, могу пользоваться

notme- Автор вопроса
Alexey Kulakov
на туфту похоже

Ну вот к примеру на уровне компрессии = 9 (предыдущий результат был при уровне = 1 (минимальный)) TZstdAlgoCompression (size = 350.00Mb, random_k = 1) time:0.43, Size: 350.01 Mb TZstdAlgoCompression (size = 350.00Mb, random_k = 2) time:11.35, Size: 242.81 Mb TZstdAlgoCompression (size = 350.00Mb, random_k = 3) time:12.89, Size: 184.74 Mb TZstdAlgoCompression (size = 350.00Mb, random_k = 4) time:12.80, Size: 149.63 Mb TZstdAlgoCompression (size = 350.00Mb, random_k = 8) time:10.05, Size: 87.46 Mb TZstdAlgoCompression (size = 350.00Mb, random_k = 16) time:6.77, Size: 49.91 Mb TZstdAlgoCompression (size = 350.00Mb, random_k = 32) time:4.32, Size: 27.89 Mb TZstdAlgoCompression (size = 350.00Mb, random_k = 64) time:2.82, Size: 15.17 Mb TZstdAlgoCompression (size = 350.00Mb, random_k = 128) time:1.88, Size: 7.96 Mb TZstdAlgoCompression (size = 350.00Mb, random_k = 256) time:1.18, Size: 4.08 Mb Похоже на правду? Что интересно выйгрыша по компрессии особого нету, зато по времени просадка значительная

notme- Автор вопроса

А по каким признакам ты определяешь?

notme
Ну вот к примеру на уровне компрессии = 9 (предыду...

ну архиватор ты написал - теперь пиши разархиватор

notme
Ну вот к примеру на уровне компрессии = 9 (предыду...

Compression speed can vary by a factor of 20 or more between the fastest and slowest levels, while decompression is uniformly fast, varying by less than 20% between the fastest and slowest levels.

notme- Автор вопроса
Serg
Compression speed can vary by a factor of 20 or mo...

Заполнение Random'ом занимает больше времени, чем упаковка 😄 кратно

notme- Автор вопроса
notme
ну я по началу тоже так хотел но на одном из случа...

@Awkward_im В общем дело-то возможно даже было не в TCompressionStream 😁 А в том, что я VTV заполняю нодами поштучно - это вызывает каждый раз перевыделение памяти А нод у меня о-ё-ёй! ) Так-что тут ты прав ) Надо или сохранять количество детей в ноде и выделять память разом, или + перейти на ленивую загрузку (но это сложнее)

notme
@Awkward_im В общем дело-то возможно даже было не...

Ваще vtv заточена на такое, там даже тест есть на скорость создания ляма узлов (только зачем такое в гуе, лям узлов???)

notme- Автор вопроса
Александр (Rouse_) Багель
Ваще vtv заточена на такое, там даже тест есть на ...

в профайлере - дерево у меня, они есть, но отображаются-то не все юзвер ходит и смотрит где больше кол-во выделений или объём

Похожие вопросы

Обсуждают сегодня

Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
А чем вам питонисты не угодили?😂
.
79
Вот смотрите у меня есть два стрима сейчас fs, cs: TStream; fs := TFileStream.Create('filename'); cs := TCompressionStream.Create(compression_level, fs); Я хочу сделать так: ...
notme
5
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
83
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Всем здравствуйте! Я хотел узнать сколько стоит средняя месячная зарплата у Electron js разработчиков? Мне очень это важно и нужно, плиз помогите узнать эту инфу! Для Джунио...
U.K.
10
Hello. Could you please help me with finding all coordinates within a radius using a spatial index, given that I have a table with coordinates? SET @lng = 37.57925; SET @lat ...
Rinchin G
8
free(NULL) это UB?
#
8
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Карта сайта