On Wed, 27 May 2009, Roger Bivand wrote:

On Wed, 27 May 2009, Hamish wrote:


Roger wrote:
Next script in R generating increasing NR and NC cases through
writeVECT6() to test plugin=FALSE/plugin=TRUE ratios?


Does R have any built in profiling tools? as grass is just a collection
of small C programs the normal ones work fine with it:

Yes, at the R level, so they won't help here. readVECT6() banches on plugin - if TRUE, it just calls readOGR() on the GRASS driver, if FALSE, it does (something like) v.out.ogr with shapefile driver to a temporary file and readOGR() on the shapefile. The C/C++ level code is in the (same) GDAL shared object for v.out.ogr and readOGR(), so I think the only difference is in the use or not of the plugin.

My second post (testing v.out.ogr to shapefile against ogr2ogr from GRASS plugin to shapefile for a many-column vector) should reveal where the problem is - my present feeling is that the plugin and v.out.ogr handle access to the GRASS vector and its attribute data differently in one way or another.

The outcome was that for the 250 by 250 case, v.out.ogr ran at about 1 sec, and ogr2ogr using the plugin at 0.2 secs. In readVECT6() - running at 20 secs on the same data, the culprit is the C/C++ ogrDataFrame() function called by readOGR() in the rgdal package, which takes almost all of the 20 secs with the GRASS driver, but < 1 sec with the shapefile driver on the same data. I'll try to investigate further - there is an interaction that I don't understand. It is possible that ogrDataFrame() is inefficient in that it reads by column, sending the driver out by feature for each field. I'll look at alternatives.

Roger


Roger


 http://grass.osgeo.org/wiki/Bugs#Using_a_profiling_tool

or use a profiling tool at the command line while running ogr2ogr with
input=grass and output=shapefile?


Nikos wrt your 10hr script:
v.db.update must open and close the DB for every time you call it. That
is very slow and inefficient. Better is to write all SQL update commands
to a file (end each line with a ';') then use that file as input to
db.execute so it opens the DB, updates all fields, closes DB again in
a single step. see the db.execute man page and v.in.garmin script for an
example (where it made a huge improvement).



Hamish





_______________________________________________
grass-stats mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/grass-stats




--
Roger Bivand
Economic Geography Section, Department of Economics, Norwegian School of
Economics and Business Administration, Helleveien 30, N-5045 Bergen,
Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: [email protected]

_______________________________________________
grass-stats mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/grass-stats

Reply via email to