At 12:03 AM 8/14/2006, Krzysztof Kowalczyk wrote:
Looking at the profile data, it looks like a lot of allocations are
due to copying between instances of Object that are obtained from
Lexer::getObj(). The best solution would probably be to rework
Lexer::getObj() and its callers to not do copying.
Seems reasonable.
However, the code is very undisciplined about how it copies data
(sometimes it's the expensive, deep copy, sometimes it's a shallow
copy that just copies data like Object obj = *objOrig). Given that
it's hard to make a change without breaking stuff. My attempt at a
simple change like making Object::string an embedded value instead of
a pointer failed and I don't even understand why.
What about using a smart pointer? Something as simple as
std::auto_ptr<> for a start - or possibly going all the way to
boost::shared_ptr<>.
Another big area of improvement would be Stream implementation.
Currently e.g. Lexer::getChar() is at the top of the profile while the
time spent actually reading the file doesn't even register. Those
layered virtual calls hurt a lot.
That's because you have a lot of characters to read...I
don't think this is really going to gain you anything since the data
has to be parsed anyway. I think the allocation of the objects FROM
the parsed data is indeed where you will get the gain.
Leonard
---------------------------------------------------------------------------
Leonard Rosenthol <mailto:[EMAIL PROTECTED]>
Chief Technical Officer <http://www.pdfsages.com>
PDF Sages, Inc. 215-938-7080 (voice)
215-938-0880 (fax)
_______________________________________________
poppler mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/poppler