<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class="">Hi all,</span>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);"><br class="">
</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">I have a question about memory usage of the python gdal bindings. For some GDAL calls (python or not), we try to optimise the gdal cache. Doing this, I’ve noticed the free RAM decreasing
 after doing gdal operations. I have been able to narrow it down to the python bindings. Using `memory_profiler` (<a href="https://pypi.org/project/memory-profiler/" class="">https://pypi.org/project/memory-profiler/</a>) I get the following:</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">
<div id="line-by-line-memory-usage" class="" style="box-sizing: inherit; color: rgb(70, 70, 70); font-family: "Source Sans Pro", Helvetica, Arial, sans-serif; font-size: 15.2px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(253, 253, 253);">
<p class="" style="box-sizing: inherit; margin: 15px 0px 0px; padding: 0px;">The first column represents the line number of the code that has been profiled, the second column (<span class="" style="box-sizing: inherit; font-style: italic;">Mem usage</span>)
 the memory usage of the Python interpreter after that line has been executed. The third column (<span class="" style="box-sizing: inherit; font-style: italic;">Increment</span>) represents the difference in memory of the current line with respect to the last
 one. The last column (<span class="" style="box-sizing: inherit; font-style: italic;">Line Contents</span>) prints the code that has been profiled.</p>
</div>
<div id="decorator" class="" style="box-sizing: inherit; color: rgb(70, 70, 70); font-family: "Source Sans Pro", Helvetica, Arial, sans-serif; font-size: 15.2px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(253, 253, 253);">
</div>
</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);"><br class="">
</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">```</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">
<div class="">101     65.4 MiB      0.0 MiB               logging.debug(kwargs)</div>
<div class="">102    203.9 MiB    138.4 MiB               gdal.Warp(temp.name, input_path, **kwargs)</div>
</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">```</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);"><br class="">
</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">It does seem related to the cache because of the following tests, but only partially. I would expect since every file is on disk that these calls do not have any lasting effect on memory
 usage.</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);"><br class="">
</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">```</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">
<div class="">98     65.4 MiB      0.0 MiB               gdal.SetCacheMax(0)</div>
<div class="">99     87.8 MiB     22.4 MiB               gdal.Warp(temp.name, input_path, **kwargs)</div>
</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">```</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);"><br class="">
</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">temp.name is a `<span class="" style="color: rgb(74, 92, 110); font-family: Menlo; background-color: rgb(255, 255, 255);">tempfile.NamedTemporaryFile(</span><span class="" style="font-family: Menlo; background-color: rgb(255, 255, 255); color: rgb(166, 202, 145);">'w+</span><span class="" style="background-color: rgb(255, 255, 255);"><font color="#a6ca91" face="Menlo" class=""><span class="" style="caret-color: rgb(166, 202, 145);">’</span></font><font color="#4a5c6e" face="Menlo" class="">)</font></span>`
 (`/var/folders/3t/_j9hh3_907g646cgt8pkkjch0000gn/T/tmpumywovz7`. The passed kwargs are ` {'dstSRS': 'EPSG:3857', 'resampleAlg': 2, 'format': 'gtiff', 'multithread': True, 'warpOptions': ['NUM_THREADS=ALL_CPUS'], 'creationOptions': ['BIGTIFF=YES', 'NUM_THREADS=ALL_CPUS’]}`.
 The input file is 84.5 MB.</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);"><br class="">
</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">Assigning and deleting the result does not affect the results. They grow bigger but also decrease after deletion. I assume this is the dataset size.</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);"><br class="">
</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">```</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">
<div class="">    96     65.4 MiB      0.0 MiB               logging.debug(kwargs)</div>
<div class="">    97    249.8 MiB    184.4 MiB               ds = gdal.Warp(temp.name, input_path, **kwargs)</div>
<div class="">    98    193.8 MiB      0.0 MiB               del ds</div>
<div class="">```</div>
</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);"><br class="">
</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">Am I overlooking any cause for this memory increase or is there a possibility to clear this?</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">Am I correct to assume the usage of the gdal python bindings in this way (All files are on disk) should have barely any effect on script memory usage?</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);"><br class="">
</div>
<div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">Thanks in advance.</div>
</body>
</html>