[Rd] Varying as.Date performance

Prof Brian Ripley ripley at stats.ox.ac.uk
Thu May 5 17:03:42 CEST 2005


On Thu, 5 May 2005, Peter Dalgaard wrote:

> Jeff Enos <jeff at kanecap.com> writes:
>
>> Thanks for these suggestions.  C-level profiling yields the following:
>>
>>   %   cumulative   self              self     total
>>  time   seconds   seconds    calls   s/call   s/call  name
>>  36.01      5.34     5.34   100000     0.00     0.00  get_locale_strings
>>   4.32      5.98     0.64   100000     0.00     0.00  mktime00
>>   3.98      6.57     0.59   277462     0.00     0.00  Rf_eval
>>   3.71      7.12     0.55   472935     0.00     0.00  Rf_findVarInFrame3
>>   3.64      7.66     0.54   100000     0.00     0.00  strptime_internal
>>   3.51      8.18     0.52        1     0.52     7.51  do_strptime
>>
>> It looks like strftime is called from get_locale_strings, which might
>> be the culprit.  Any suggestions on where I might go from here?
>
> You might try modifying get_locale_strings (and its wide counterpart)
> with a check for an unchanged locale. E.g.
>
> static char *last_LC_TIME=NULL;
>
> ....
>
>  tmp = setlocale(LC_TIME, NULL)
>  if (strcmp(tmp, last_LC_TIME)) return;
>
>  last_LC_TIME = tmp;
>
> .... set the strings ....
>
> if the call to setlocale is considerably faster than 40 calls to
> strftime(), you might have a winner.

Yes, I think that would be a worthwhile optimization.  I didn't bother 
because I figured it would be fast enough (which at 50musec it almost 
always is).

However, get_locale_strings is only 36% of the total, and we have at least 
another 60% to account for.  (81.01 vs 1.18 secs.)

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



More information about the R-devel mailing list