<br><br><div class="gmail_quote">2011/2/17 Joaquin Ferrero <span dir="ltr">&lt;<a href="mailto:explorer@joaquinferrero.com">explorer@joaquinferrero.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
El 17/02/11 18:38, deibyz escribió:<div><div></div><div class="h5"><br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
A las buenas tardes,<br>
<br>
Estoy volviendo a pasar por esa fase de la vida en la que decides que es una buena idea sacar estadísticas de unos logs con mogollón de líneas. Uno, que siempre recae en los clásicos.<br>
<br>
La cosa está en que esta vez son *muchas* líneas y, entre otras cosas, tengo que calcular diferencias de tiempos. Como siempre, en vez de tener un timestamp tengo una fecha en un formato tal que %Y%m%d%H%M%S%X (siendo %X diezmilésimas de segundo).<br>

<br>
El problema es que mi parseador se pasa cerca de 1/3 del tiempo en la sub date2epoch, que me devuelve los segundos (con precisión de diezmilésimas) del timestamp.<br>
<br>
Después de unos cuantos benckmarks (usando DateTime, POSIX::strptime, etc...), lo que mejor resultado me está dando es tirar directamente de POSIX::mktime partiendo &quot;a mano&quot; la fecha, tal que así:<br>
<br>
sub _date2epoch {<br>
     my $self = shift;<br>
     my $stamp = shift;<br>
     my ( $nano, @time ) = reverse unpack &quot;A4A2A2A2A2A2A4&quot;, $stamp;<br>
     $time[5] -= 1900;<br>
     $time[4] -= 1;<br>
     return ( mktime(@time) + $nano );<br>
}<br>
<br>
Pero todavía se me queda muy corto de rendimiento... Alguna idea mágica de cómo hacerlo más rápido todavía?<br>
<br>
</blockquote>
<br></div></div>
(no probado)<br>
<br>
use Memoize;<br>
<br>
memoize(_date2epoch);<br>
<br>
my($local_nano, @local_time);<br>
<br>
sub _date2epoch {<br>
    ($local_nano, @local_time ) = reverse unpack &quot;A4A2A2A2A2A2A4&quot;, $_[1];<br>
<br>
    $local_time[4] -= 1;<br>
    $local_time[5] -= 1900;<br>
<br>
    return ( mktime(@local_time) + $local_nano );<br>
}<br><font color="#888888">
<br>
<br></font></blockquote><div><br>Si no recuerdo mal, lo que hacía Memoize era guardar una tabla con argumentos y salidas para no carcular de nuevo ante los mismos valores, no?<br><br>En este caso dudo mucho que ayude, ya que, al tener la fecha precisión de cuatro decimales sería muy poco probable que se repitieran los mismos parámetros.<br>
<br>Lo que sí que podría probar es a hacer un wrapper con mktime que &quot;memoize&quot; con precisión hasta segundos, que ahí sí que habrá más llamadas. A ver si hay suerte.<br><br>Muchas gracias!<br><br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<font color="#888888">
-- <br>
JF^D<br>
_______________________________________________<br>
Madrid-pm mailing list<br>
<a href="mailto:Madrid-pm@pm.org" target="_blank">Madrid-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/madrid-pm" target="_blank">http://mail.pm.org/mailman/listinfo/madrid-pm</a><br>
</font></blockquote></div><br>