<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style id="owaParaStyle" type="text/css">
<!--
p
        {margin-top:0;
        margin-bottom:0}
p
        {margin-top:0;
        margin-bottom:0}
-->
P {margin-top:0;margin-bottom:0;}</style>
</head>
<body ocsi="0" fpstyle="1">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">
<div style="direction:ltr; font-family:Tahoma; color:#000000; font-size:10pt">Hi Again,<br>
<br>
I've played with it more and have another example that shows differences in memory usage depending on the interplay between calls to numpy.ones() and<font size="2">
</font><font face="Tahoma" color="black" size="2"><span style="font-size:10pt;" dir="ltr">converter.GetImageFromArray(inputNumpyVolume):<br>
</span></font><br>
<b>import itk<br>
import numpy as np<br>
import resource<br>
import matplotlib.pyplot as plt<br>
<br>
ImageType = itk.Image[itk.D, 3]<br>
converter = itk.PyBuffer[ImageType]<br>
<br>
# adding +1 to numpy created once<br>
inputNumpyVolume = np.ones([100,100,100])<br>
M = []<br>
n = 10<br>
for i in range(n):<br>
<br>
  inputNumpyVolume += 1<br>
  inputVolume = converter.GetImageFromArray(inputNumpyVolume)<br>
  M.append(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss)<br>
  <br>
X = range(n)<br>
plt.plot(X,M,'o', color='red')<br>
<br>
# creating new numpy volume each time<br>
M = []<br>
for i in range(n):<br>
<br>
  inputNumpyVolume = np.ones([100,100,100])<br>
  inputVolume = converter.GetImageFromArray(inputNumpyVolume)<br>
  M.append(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss)<br>
    <br>
X = [x + n for x in range(n)]<br>
plt.plot(X,M,'o', color='green')<br>
<br>
# creating new numpy volume but not calling converter.GetImageFromArray(inputNumpyVolume)<br>
M = []<br>
for i in range(n):<br>
<br>
  inputNumpyVolume = np.ones([100,100,100])<br>
  M.append(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss)<br>
    <br>
X = [x + 2*n for x in range(n)]<br>
plt.plot(X,M,'o', color='blue')<br>
<br>
plt.savefig("PyBufferMem.png")<br>
plt.show()<br>
<br>
</b>Thanks for taking a look.<br>
<br>
Roy<br>
<div style="font-family:Times New Roman; color:#000000; font-size:16px">
<hr tabindex="-1">
<div id="divRpF77083" style="direction:ltr"><font face="Tahoma" color="#000000" size="2"><b>From:</b> Insight-users [insight-users-bounces@itk.org] on behalf of Harnish, Roy [Roy.Harnish@ucsf.edu]<br>
<b>Sent:</b> Thursday, September 01, 2016 2:39 PM<br>
<b>To:</b> insight-users@itk.org<br>
<b>Subject:</b> [ITK-users] PyBuffer memory consumption<br>
</font><br>
</div>
<div></div>
<div>
<div style="direction:ltr; font-family:Tahoma; color:#000000; font-size:10pt">Hi,
<br>
<br>
I'm resurrecting a thread that I ran across trying to debug what looks to be a memory leak when using PyBuffer:<br>
<br>
<a href="https://itk.org/pipermail/insight-users/2009-May/030386.html" target="_blank">https://itk.org/pipermail/insight-users/2009-May/030386.html</a><br>
<br>
If I repeatedly assign the output of itk.PyBuffer[ImageType].GetImageFromArray() to the same python variable name, more and more memory is consumed by the process. Wondering if anyone knows how to get this memory released? Here's some example code based on
 the linked thread that should reproduce the problem:<br>
<br>
<b>import itk<br>
import numpy as np<br>
import resource<br>
<br>
M = []<br>
<br>
for i in range(200):<br>
<br>
  M.append(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss)<br>
<br>
  ImageType = itk.Image[itk.D, 3]<br>
  converter = itk.PyBuffer[ImageType]<br>
<br>
  inputNumpyVolume = np.ones((100, 100, 100))<br>
  inputVolume = converter.GetImageFromArray(inputNumpyVolume)<br>
#  inputVolume.Delete()<br>
  <br>
print M</b><br>
<br>
Any suggestions much appreciated.<br>
<br>
Roy<br>
</div>
</div>
</div>
</div>
</div>
</body>
</html>