HTRDF.c parser performance improvement
"Brown, David" <[email protected]> Fri, 3 Feb 2006 11:44:15 -0500
| Newsgroups | gmane.comp.lib.libwww |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format.
------_=_NextPart_001_01C628E1.1168FFD7
Content-Type: multipart/alternative;
boundary="----_=_NextPart_002_01C628E1.1168FFD7"
------_=_NextPart_002_01C628E1.1168FFD7
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
Good day,
I've been using the libwww HTRDF component for parsing files. I made a
recent change (diff of HTRDF.c output below) that has improved the
parsing process. In my case, parsing time went from 74 minutes to 4
minutes on a file with a 300K elements. I am not an official hacker and
do not have write access to the CVS repository. So I offer my
contribution via this email. The fix is based on the latest HTRDF.c
file. I attached the updated HTRDF.c file for your revision. Assuming
this is 'hacker approved', can someone put this into the CVS repository?
Regards,
David Brown
=20
> HTList * m_lastChild;
233a235
> me->m_lastChild =3D me->m_children;
253a256
> me->m_lastChild =3D me->m_children;
293c296,303
< return (me && element) ? HTList_appendObject(me->m_children,
element) : NO;
---
> if (me && element) {
> HTList *lastChild;
> if ((lastChild =3D HTList_addList(me->m_lastChild, element))) {
> me->m_lastChild =3D lastChild;
> return YES;
> }
> }
> return NO;
------_=_NextPart_002_01C628E1.1168FFD7
Content-Type: text/html;
charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Dus-ascii">
<TITLE></TITLE>
<META content=3D"MSHTML 6.00.2800.1479" name=3DGENERATOR></HEAD>
<BODY>
<P><FONT face=3DArial size=3D2>Good day,<BR><BR>I've been using the =
libwww HTRDF=20
component for parsing files. I made a recent change (diff of HTRDF.c =
output=20
below) that has improved the parsing process. In my case, parsing time =
went from=20
74 minutes to 4 minutes on a file with a 300K elements. I am not an =
official=20
hacker and do not have write access to the CVS repository. So I offer my =
contribution via this email. The fix is based on the latest HTRDF.c =
file. I=20
attached the updated HTRDF.c file for your revision. Assuming this is =
'hacker=20
approved', can someone put this into the CVS repository?</FONT></P>
<P><FONT face=3DArial size=3D2>Regards,</FONT></P>
<P><FONT face=3DArial size=3D2>David Brown</FONT></P>
<P><FONT face=3DArial size=3D2></FONT> </P>
<P><FONT face=3DArial color=3D#0000ff =
size=3D2>> HTList=20
* =
=20
m_lastChild;<BR>233a235<BR>> =20
me->m_lastChild =3D=20
me->m_children;<BR>253a256<BR>> =
=20
me->m_lastChild =3D=20
me->m_children;<BR>293c296,303<BR>< return =
(me=20
&& element) ? HTList_appendObject(me->m_children, element) :=20
NO;<BR>---<BR>> if (me && element)=20
{<BR>> HTList=20
*lastChild;<BR>> if ((lastChild =
=3D=20
HTList_addList(me->m_lastChild, element)))=20
{<BR>> =
me->m_lastChild =3D=20
lastChild;<BR>> return=20
YES;<BR>> =20
}<BR>> }<BR>> =
return=20
NO;<BR></FONT></P></BODY></HTML>
------_=_NextPart_002_01C628E1.1168FFD7--
------_=_NextPart_001_01C628E1.1168FFD7
Content-Type: application/x-zip-compressed;
name="HTRDF.zip"
Content-Transfer-Encoding: base64
Content-Description: HTRDF.zip
Content-Disposition: attachment;
filename="HTRDF.zip"
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
------_=_NextPart_001_01C628E1.1168FFD7--