[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Call to locale_charset within wcwidth
From: |
Eli Zaretskii |
Subject: |
Re: Call to locale_charset within wcwidth |
Date: |
Sat, 31 Jan 2015 16:15:35 +0200 |
> From: Daiki Ueno <address@hidden>
> Cc: Eli Zaretskii <address@hidden>, address@hidden
> Date: Tue, 27 Jan 2015 15:14:36 +0900
>
> I took a bit more serious attempt to this, and ended up with the
> attached patch. Using the following test program:
>
> #include "config.h"
> #include "localcharset.h"
> #include <stdio.h>
>
> int main (void)
> {
> int i;
>
> printf ("%s\n", locale_charset ());
> for (i = 0; i < 1000000; i++)
> locale_charset ();
> printf ("%s\n", locale_charset ());
>
> return 0;
> }
>
> it resulted in a significant performance improvement, although my test
> environment is on Wine (I guess Eli could do testing under a more
> practical setting).
>
> Before:
>
> CP1252
> CP1252
>
> real 0m3.048s
> user 0m0.100s
> sys 0m0.070s
>
> After:
>
> CP1252
> CP1252
>
> real 0m0.314s
> user 0m0.120s
> sys 0m0.050s
Thanks. This improves things, but unfortunately not enough. The
reason is that call to setlocale at the beginning of locale_charset,
which is always made. If I replace that call with a constant string,
I get a 20-fold speedup, and the display of large nodes in the Info
reader becomes instantaneous, as it was in v5.2.
Here are my timings, measured on Windows XPSP3, after enlarging the
loop count to 2000000, to get the fastest version out of the
quantization error of the system clock:
Original version:
real 00h00m04.748s
user 00h00m04.750s
sys 00h00m00.000s
With values cached in thread-local storage:
real 00h00m01.280s
user 00h00m01.281s
sys 00h00m00.015s
Without the call to setlocale in locale_charset:
real 00h00m00.062s
user 00h00m00.046s
sys 00h00m00.031s