<div dir="ltr">Hi Gareth,<div><br></div><div>How are you initializing your dataTmp array? In my Rasterio project, I've found that numpy.empty() is the fastest array allocator and use it whenever possible. I also use the GDAL C API and Cython (in case you're interested: <a href="https://github.com/mapbox/rasterio/blob/c80b568903ef7b902ce6254a42c73af9ddcc8362/rasterio/_io.pyx#L58-L69">https://github.com/mapbox/rasterio/blob/c80b568903ef7b902ce6254a42c73af9ddcc8362/rasterio/_io.pyx#L58-L69</a>) and find the performance to be as good as ReadAsArray.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 11, 2016 at 10:53 AM, Gareth James Jones [gjj12] <span dir="ltr"><<a href="mailto:gjj12@aber.ac.uk" target="_blank">gjj12@aber.ac.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




<div dir="ltr">
<div style="font-size:12pt;color:#000000;background-color:#ffffff;font-family:Calibri,Arial,Helvetica,sans-serif">
<div>I'm currently writing optimisations for a raster viewer program which uses gdal as it's base. It's currently written purely in python, and has some major speed issues which cause problems when we are reading many files at a time. After making some optimisations
 in the python, and getting quite a minimal speed increase, I proceeded to profile the program quite heavily and found that our getImage method was our slowest call. I had already performed some optimisations on this function so decided to write a C-Extension
 so that we could get some speed increases through a lower level language.</div>
<div><br>
</div>
<div>This has worked for the most part, however there is still one issue, we have found a speed increase of ~2s for some of our larger files in the bulk of the code. But this is negated by the GDALRasterIO call, which is actually about 3s slower than the python
 ReadAsArray.</div>
<div><br>
</div>
<div>This doesn't make any sense to me as ReadAsArray is a wrapper around a C++ call to GDALRasterIO, and thus should be slower than having a call straight to GDALRasterIO.</div>
<div><br>
</div>
<div>I was hoping someone here might know of a way to read the rasters more efficiently. I have tried to implement a method using ReadBlock rather than RasterIO, but due to the replication that RasterIO does it didn't work at all. (I'm currently trying to figure
 out a way to do that replication without losing too much speed).</div>
<div><br>
</div>
<div>The RasterIO call i'm using is</div>
<div><br>
</div>
<div>band->RasterIO(GF_Read, this->ovleft, this->ovtop, this->ovxsize,</div>
<div>               this->ovysize, dataTmp, this->ovxsize, this->ovysize,</div>
<div>               band->GetRasterDataType(), 0, 0);</div>
<div><br>
</div>
<div>The old python call was:</div>
<div><br>
</div>
<div>dataTmp = band.ReadAsArray(ovleft, ovtop, </div>
<div>    ovxsize, ovysize,</div>
<div>    dspRastXSize, dspRastYSize)</div>
<div><br>
</div>
<div><br>
</div>
<div>Thanks in advance</div><span class="HOEnZb"><font color="#888888">
<div><br>
</div>
<div>Gareth Jones</div>
</font></span></div>
</div>

<br>_______________________________________________<br>
gdal-dev mailing list<br>
<a href="mailto:gdal-dev@lists.osgeo.org">gdal-dev@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/gdal-dev" rel="noreferrer" target="_blank">http://lists.osgeo.org/mailman/listinfo/gdal-dev</a><br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">Sean Gillies</div></div>
</div>