我在matplotlib.imshow中发现了内存泄漏问题。我了解类似的问题(例如Matplotlib imshow中过多的内存使用),并且我已经阅读了相关的ironpython主题 (https://github.com/ipython/ipython/issues/1623/)。
我认为以下代码应该在运行时(如果没有内存泄漏)消耗恒定的内存量。然而,实际上它每次迭代都会增加。
我正在运行我能找到的最新版本(matplotlib-1.2.0rc3.win32-py2.7和numpy-1.7.0.win32-py2.7),但问题仍然存在。我没有保留imshow的返回值,并且事实上我明确地删除了它,因此我认为IronPython讨论中的注意事项不适用。行为在循环内部有或没有明确分配和删除是相同的。
我在matplotlib-1.2.0.win32-py2.7中看到的行为是相同的。
每个迭代似乎都会保留生成图像所需的任何内存。我选择了一个大型(1024x1024)随机矩阵来使每个图像的大小变得有趣。
我正在运行带有2G物理内存的Win7 pro,32位python2.7.3(因此是内存错误),以及上述numpy和matplotlib软件包。当我运行440次左右时,下面的代码会出现内存错误。Windows任务管理器在失败时报告了1860232K的内存使用。
以下是演示泄漏的代码:
我认为以下代码应该在运行时(如果没有内存泄漏)消耗恒定的内存量。然而,实际上它每次迭代都会增加。
我正在运行我能找到的最新版本(matplotlib-1.2.0rc3.win32-py2.7和numpy-1.7.0.win32-py2.7),但问题仍然存在。我没有保留imshow的返回值,并且事实上我明确地删除了它,因此我认为IronPython讨论中的注意事项不适用。行为在循环内部有或没有明确分配和删除是相同的。
我在matplotlib-1.2.0.win32-py2.7中看到的行为是相同的。
每个迭代似乎都会保留生成图像所需的任何内存。我选择了一个大型(1024x1024)随机矩阵来使每个图像的大小变得有趣。
我正在运行带有2G物理内存的Win7 pro,32位python2.7.3(因此是内存错误),以及上述numpy和matplotlib软件包。当我运行440次左右时,下面的代码会出现内存错误。Windows任务管理器在失败时报告了1860232K的内存使用。
以下是演示泄漏的代码:
IMAGE_SIZE = 1024
import random
RANDOM_MATRIX = []
for i in range(IMAGE_SIZE):
RANDOM_MATRIX.append([random.randint(0, 100) for each in range(IMAGE_SIZE)])
def exercise(aMatrix, aCount):
for i in range(aCount):
anImage = imshow(aMatrix, origin='lower left', vmin=0, vmax=100)
del(anImage)
if __name__=='__main__':
from pylab import *
exercise(RANDOM_MATRIX, 4096)
我可以使用PIL而不是matplotlib来渲染图像。如果没有解决方法,我认为这对于matplotlib来说是一个致命问题。