Вверх ↑
Ответов: 4655
Рейтинг: 760
#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