Вверх ↑
Ответов: 4621
Рейтинг: 746
#1: 2017-12-07 11:49:30 ЛС | профиль | цитата
Схема слишком муторная. Потеря скорости происходит при конвертации StreamToStr для подачи на GZIP, тогда как у него есть отдельный метод doCompressStream. А у ZLIB - нету метода для сжатия строк, поэтому "улучшать на один уровень или выше компонента ZLIB" не канает - компонент ZLIB на "один уровень" (или больше) ниже, чем мой GZIP.

Вот корректная схема теста быстродействия:



Add(MainForm,2953706,21,105)
{
Height=268
Caption="Тест компрессии"
Position=1
}
Add(TimeCounter,11491838,392,434)
{
link(onStart,14974975:doCompress,[])
link(onStop,11103376:doEvent1,[(432,447)(432,489)])
}
Add(Label,2676694,14,224)
{
Left=5
Top=15
Width=36
Height=17
Caption="Файл:"
}
Add(Memo,4392622,644,322)
{
Left=5
Top=50
Width=375
Height=110
ScrollBars=2
}
Add(Button,9779034,147,644)
{
Left=5
Top=205
Width=125
Caption="Выполнить"
link(onClick,3576136:doEvent1,[])
}
Add(Edit,3169018,322,238)
{
Left=45
Top=10
Width=335
Text="test.txt"
}
Add(LineBreakEx,11296485,322,294)
{
Caption="file"
Type=3
link(_Data,3169018:Text,[])
}
Add(LineBreakEx,12177374,637,483)
{
Caption="add"
}
Add(LineBreakEx,2917070,329,399)
{
Caption="file"
Type=2
}
Add(LineBreakEx,16369636,588,322)
{
Caption="add"
Type=1
link(OnEvent,4392622:doAdd,[])
}
Add(Hub,3576136,224,644)
{
link(onEvent1,12662887:doOpen,[(284,650)(284,440)])
link(onEvent2,11462946:doOpen,[(282,657)(282,783)])
}
Add(ZLIB,14974975,483,434)
{
link(onStream,11491838:doStop,[(546,440)(546,409)(380,409)(380,447)])
}
Add(FileStream,12662887,329,434)
{
link(onLoad,11491838:doStart,[])
link(FileName,2917070:getVar,[])
}
Add(Hub,11103376,483,483)
{
link(onEvent1,9545499:doString,[])
link(onEvent2,12662887:doClose,[(550,496)(550,527)(317,527)(317,447)])
}
Add(FormatStr,9545499,581,483)
{
Mask="ZLIB: %1 ms"
link(onFString,12177374:doWork,[])
}
Add(TimeCounter,14919540,420,777)
{
link(onStart,1922754:doCompressStream,[])
link(onStop,13100280:doEvent1,[(479,790)(479,860)])
}
Add(LineBreakEx,2404323,665,854)
{
Caption="add"
}
Add(LineBreakEx,2362627,357,742)
{
Caption="file"
Type=2
}
Add(FileStream,11462946,357,777)
{
link(onLoad,14919540:doStart,[])
link(FileName,2362627:getVar,[])
}
Add(Hub,13100280,511,854)
{
link(onEvent1,3503577:doString,[])
link(onEvent2,11462946:doClose,[(584,867)(584,909)(345,909)(345,790)])
}
Add(FormatStr,3503577,609,854)
{
Mask="GZIP: %1 ms"
link(onFString,2404323:doWork,[])
}
Add(GZIP,1922754,637,749)
{
Level=9
Point(doCompressStream)
Point(Count)
Point(SrcStream)
Point(DstStream)
Point(doLevel)
link(onResult,3038085:doEvent1,[])
link(Count,11462946:Size,[(664,737)(398,737)(398,824)(370,824)])
link(DstStream,854499:Stream,[])
}
Add(MemoryStream,854499,672,693)
{
}
Add(TrackBar,15295084,574,784)
{
Left=70
Top=165
Width=315
Max=9
Position=9
link(onPosition,1922754:doLevel,[])
}
Add(Label,1173904,14,168)
{
Left=5
Top=170
Width=57
Height=17
Caption="GZIP level:"
}
Add(Hub,3038085,714,749)
{
link(onEvent1,854499:doClear,[(746,755)(746,668)(660,668)(660,706)])
link(onEvent2,14919540:doStop,[(772,762)(772,632)(408,632)(408,790)])
}

Для корректных результатов размер файла должен быть достаточно большим, чтобы компрессия занимала хотя бы 10 секунд. Примерно хватит объёма от 30 Мб. Как и следовало ожидать, быстродействие обоих компонентов одинаковое (на одинаковом уровне компрессии), поскольку используется один и тот же алгоритм.
карма: 26

0