我在 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 物理 RAM、32 位 python2.7.3(因此出现内存错误)以及上述 numpy 和 matplotlib 包的 Win7 pro。下面的代码在迭代 440 左右时因内存错误而失败。windows 任务管理器在失败时报告消耗了 1,860,232K。
这是演示泄漏的代码:
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 的阻碍。