# smart_str performance

- Thread: https://externals.io/message/1860
- Original archive: https://news-web.php.net/php.internals/1860
- Started by Brian J. France on 2003-05-21T16:36:40+00:00
- Messages: 2
- Reply by email to internals@lists.php.net
- More for agents: search with https://externals.io/search.md?q={query} · JSON API at https://externals.io/api · documentation at https://externals.io/llms.txt

---

## #1862 — Sterling Hughes — 2003-05-21T15:27:21+00:00

URL: https://externals.io/message/1860#1862 · In reply to: #1860

Switched it to avoid a copy on convert_to_string().  Performance in PHP5
now beats the previous version.

-Sterling


> This was a email I sent to Rasmus and another co-worker a while ago and forgot 
> to post the question to the list.  I just saw a commit converting zlib to 
> smart_str and figured I would send it now.
> 
> Comments?
> 
> Brian
> 
> ----
> I think I found what you were looking for yesterday.  implode has change 
> between 4.3 and 4.2.  4.2 does the double pass while 4.3 has changed to use a 
> new smart_str struct with smart_str_appendl function (a struct and function 
> calls around what I was doing in my extension).  I decided to run some 
> quick tests and here is what I have found:
> 
> for ( $i=0; $i < $count; $i++ ) {
>   $arr[] = rand_string_function(); // 12 characters
> }
> 
> $start = `gettimeofday()`;
> $str = implode( "", $arr );
> $end = `gettimeofday()`;
> printf( "%8.8d: %8.8f\n", $count, time_diff( $start, $end ) );
> 
> give this output: 
> 
> 4.3:
>        1:        0.00005100
>        2:        0.00002800
>        5:        0.00003700
>       10:        0.00006000
>      100:        0.00045600
>     1000:        0.00478600
>    10000:        0.06507500
>   100000:        1.71620700
> 
> 4.2:
>        1:        0.00004700
>        2:        0.00002500
>        5:        0.00002800
>       10:        0.00004000
>      100:        0.00022400
>     1000:        0.00240700
>    10000:        0.03677200
>   100000:        0.37068200
> 
> While below 10 items I am sure it is hard to tell the difference, but it is 
> slower in all cases.  Any clue why one item is slower than two or even five?
> 
> Brian
-- 
"First they ignore you, then they laugh at you,  
 then they fight you, then you win."  
    - Gandhi

---

## #1860 — Brian J. France — 2003-05-21T16:36:40+00:00

URL: https://externals.io/message/1860#1860

This was a email I sent to Rasmus and another co-worker a while ago and forgot 
to post the question to the list.  I just saw a commit converting zlib to 
smart_str and figured I would send it now.

Comments?

Brian

----
I think I found what you were looking for yesterday.  implode has change 
between 4.3 and 4.2.  4.2 does the double pass while 4.3 has changed to use a 
new smart_str struct with smart_str_appendl function (a struct and function 
calls around what I was doing in my extension).  I decided to run some 
quick tests and here is what I have found:

for ( $i=0; $i < $count; $i++ ) {
  $arr[] = rand_string_function(); // 12 characters
}

$start = `gettimeofday()`;
$str = implode( "", $arr );
$end = `gettimeofday()`;
printf( "%8.8d: %8.8f\n", $count, time_diff( $start, $end ) );

give this output: 

4.3:
       1:        0.00005100
       2:        0.00002800
       5:        0.00003700
      10:        0.00006000
     100:        0.00045600
    1000:        0.00478600
   10000:        0.06507500
  100000:        1.71620700

4.2:
       1:        0.00004700
       2:        0.00002500
       5:        0.00002800
      10:        0.00004000
     100:        0.00022400
    1000:        0.00240700
   10000:        0.03677200
  100000:        0.37068200

While below 10 items I am sure it is hard to tell the difference, but it is 
slower in all cases.  Any clue why one item is slower than two or even five?

Brian
