[Fdo_issues] ArcSDE: improve Select performance (PART I)

Pierre Dalcourt pierre.dalcourt at autodesk.com
Wed Jan 10 15:12:50 EST 2007


 

Implemented several performance enhancements in ArcSDE Provider for
selecting data,

based on feedback from Rational Quantify running on a VM on the arcsde
server:

 

1) Now maintain buffers on the connection object for geometry conversion
(for both reading and writing), instead of

calling malloc/free multiple times per geometry value.

 

2) Now cache the geometry factory on the connection, instead of calling
GetInstance() multiple times.

Even though the geometry factory maintains its own cache, it's more
efficient for us to do it this way.

 

3) Now call ArcSDEReader::validate() at most once per row.

 

4) Now maintain a buffer for each string column and re-use it, instead
of calling new wchar_t[] and delete for each row.

            Also, convert the multibyte strings to the destination
wchar_t, instead of to a temporary buffer on the stack, to avoid a call
to wcscpy().

 

5) Now create only one FdoByteArray object per geometry value instead of
possibly 2 (depending on which GetGeometry() method was called).

 

 

Also updated ArcSDEProvider.vcproj and UnitTest.vcproj to use
Quantify-friendly settings (namely "/fixed:no" in linker additional
settings).

 

Measured performance running ArcSDE Provider unit tests in release mode,
with client on same machine as server:

            - printf-based tests reported ~14.5% increase in performance
when calling all Get methods (geometry, double, string, etc) on each row

            and building a geometry based on the FGF returned by the
reader.

            - Quantify-based tests reported much larger gains (up to
2x), but I've heard before that Quantify can be misleading.

 

 

 

Modified:
branches\3.2.x\Providers\ArcSDE\Src\Provider\ArcSDEConnection.cpp  

Modified:
branches\3.2.x\Providers\ArcSDE\Src\Provider\ArcSDEConnection.h  

Modified:
branches\3.2.x\Providers\ArcSDE\Src\Provider\ArcSDEFeatureReader.cpp  

Modified:
branches\3.2.x\Providers\ArcSDE\Src\Provider\ArcSDEFilterToSql.cpp  

Modified:
branches\3.2.x\Providers\ArcSDE\Src\Provider\ArcSDEProvider.vcproj  

Modified: branches\3.2.x\Providers\ArcSDE\Src\Provider\ArcSDEReader.cpp


Modified: branches\3.2.x\Providers\ArcSDE\Src\Provider\ArcSDEReader.h  

Modified: branches\3.2.x\Providers\ArcSDE\Src\Provider\ArcSDEUtils.cpp  

Modified: branches\3.2.x\Providers\ArcSDE\Src\Provider\ArcSDEUtils.h  

Modified: branches\3.2.x\Providers\ArcSDE\Src\UnitTest\ArcSDETests.cpp  

Modified: branches\3.2.x\Providers\ArcSDE\Src\UnitTest\ArcSDETests.h  

Modified: branches\3.2.x\Providers\ArcSDE\Src\UnitTest\SelectTests.cpp  

Modified: branches\3.2.x\Providers\ArcSDE\Src\UnitTest\SelectTests.h  

Modified: branches\3.2.x\Providers\ArcSDE\Src\UnitTest\UnitTest.vcproj  

 

Modified: branches\3.2.x\Utilities\Common\Inc\FdoCommonStringUtil.h  

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/fdo_issues/attachments/20070110/b6a01e4d/attachment-0001.html


More information about the Fdo_issues mailing list