[geos-devel] JTS/GEOS performance

strk at refractions.net strk at refractions.net
Tue Feb 1 17:25:05 EST 2005


On Tue, Feb 01, 2005 at 11:22:54PM +0100, strk at refractions.net wrote:
> On Tue, Feb 01, 2005 at 10:52:23AM -0800, Martin Davis wrote:
> > Well it's good to hear that GEOS isn't wildly different to JTS timings
> > after all.
> 
> Yeah, but it's still 3.5 times slower ...
> 
> > After some more thought I think there may be some improvements which
> > don't require implementing smart ptrs and ref counting (not that these
> > are bad things to do, they just take time).
> >  
> > I suspect that heavy use is being made of
> > CoordinateSequence::getCoordinate, and that this is resulting in many
> > Coordinate objects being allocated.  A better pattern for callers is to
> > preallocate a single Coordinate and then use getCoordinate(Coordinate *)
> > to retrieve coordinate values into it.  (JTS doesn't do this now, but
> > will be moving to this style to reduce *its* allocation of Coordinate
> > objects).
> 
> GEOS use CoordinateSequence::getAt, which returns a *reference*, so
> no allocation is involved. Explicit copy is performed if the caller
> assigns the return to a real Coordinate (as opposite to a Coordinate
> ref).
> 
> Taking a closer look of our bottleneck
> (indexMonotoneChain::computeOverlaps) I found out that GEOS
> uses CoordinateSequence where JTS uses Coordinate[].
> This means one level of indirection less.
> GEOS getAt internally calls the equivalent of JTS [] operator,
> calling it directly should give us some better results.
> 
> Probably inlining CoordinateSequence::getAt() would give same
> results w/ less effort but breaking ABI. I'll check this.

Oops.. I correct myself, we cannot inline CoordinateSequence::getAt()
as it's a virtual class. Still I'd consider using vector<Coordinate>,
which can returned with no copy involved by the DefaultCoordinateSequence
using the toVector() method.

--strk;

> 
> --strk;
> 
> > Martin Davis, Senior Technical Architect
> > Vivid Solutions Inc.      www.vividsolutions.com
> > Suite #1A-2328 Government Street Victoria, B.C. V8T 5G5
> > Phone: (250) 385 6040 - Local 308 Fax: (250) 385 6046
> >  
> 
> > _______________________________________________
> > geos-devel mailing list
> > geos-devel at geos.refractions.net
> > http://geos.refractions.net/mailman/listinfo/geos-devel
> 
> _______________________________________________
> geos-devel mailing list
> geos-devel at geos.refractions.net
> http://geos.refractions.net/mailman/listinfo/geos-devel



More information about the geos-devel mailing list