Без копирования - никак, если вам нужно собрать в один буфер, а приходят
из разных мест.
Если заранее известен размер (либо есть оценка) - то можно попробовать
выделить заранее все необходимое место, но это XSкой.
On 03/10/2015 08:27 PM, Andrey Kovbovich wrote:
Задача - приходят от I/O куски данных, и нужно их буферизировать перед
обработкой. Вопрос как это сделать эффективно (идеально - без
копирования).
10 марта 2015 г., 20:20 пользователь Dmitry Smal <[email protected]
<mailto:[email protected]>> написал:
А что у вас за задача такая ?
Есть ооочень много конкатенаций подряд идет (в цикле например) -
то нужно оптимизировать сам алгоритм склейки.
Если не нагружен - оставить более читаемый вариант =)
On 03/10/2015 07:59 PM, Andrey Kovbovich wrote:
Интересно, получается конкатенировать более чем в 2 раза быстрее
последовательно (selfcat), а не разом ($z = $x . $y);
Warstone, я писал про использование сабстр с параметром replace
(4ый). А ты почему-то используешь в примерах 3х-арный вариант.
2015-03-10 19:48 GMT+03:00 PEF Secure <[email protected]
<mailto:[email protected]>>:
On Tuesday, March 10, 2015 17:03:36 Andrey Kovbovich wrote:
> Кто-нибудь знает, за счет чего substr быстрее?
>
> $ perl -MBenchmark=cmpthese
>
-wE'my$x="0"x1_000_000;my$b="1"x100_000;cmpthese(10000,{concat=>sub{my$z=$x.
>
$b;},substr=>sub{my$z="";substr$z,(length$z),(length$x),$x;substr$z,(length$
> z),(length$b),$b;},join=>sub{my$z=join("",$x,$b)}});' Rate
join concat
> substr
> join 3922/s -- -0% -58%
> concat 3937/s 0% -- -57%
> substr 9259/s 136% 135% --
selfcat => sub {my$z=$x; $z.=$b;}
вот примерный аналог твоего substr
--
PEF Developer
--
Moscow.pm mailing list
[email protected] <mailto:[email protected]> | http://moscow.pm.org
--
Moscow.pm mailing list
[email protected] <mailto:[email protected]> | http://moscow.pm.org
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org