> -----Original Message----- > From: Doug MacEachern [mailto:[EMAIL PROTECTED]] > > i'm guessing part of the difference in your code is due to > fprintf having > a pre-allocated buffer, whereas the SV's SvPVX has not been > pre-allocated > and gets realloc-ed each time you call sv_catpv. have a look > at the code > below, fprintf is faster than sv_catpvn, but if the SvPVX is > preallocated, > sv_catpvn becomes faster than fprintf: > > timethese(1_000, { > fprintf => sub { TickTest::fprintf() }, > svcat => sub { TickTest::svcat() }, > svcat_pre => sub { TickTest::svcat_pre() }, > }); > > Benchmark: timing 1000 iterations of fprintf, svcat, svcat_pre... > fprintf: 9 wallclock secs ( 8.72 usr + 0.00 sys = 8.72 > CPU) @ 114.68/s (n=1000) > svcat: 13 wallclock secs (12.82 usr + 0.00 sys = 12.82 > CPU) @ 78.00/s (n=1000) > svcat_pre: 2 wallclock secs ( 2.75 usr + 0.00 sys = 2.75 > CPU) @ 363.64/s (n=1000)
Very interesting. I'll try that (I wish you'd been listening to clp.mod when I posted - other perl gurus weren't much help). Matt. _____________________________________________________________________ This message has been checked for all known viruses by Star Internet delivered through the MessageLabs Virus Scanning Service. For further information visit http://www.star.net.uk/stats.asp or alternatively call Star Internet for details on the Virus Scanning Service.