4

我阅读了几个 ZODB 教程,但我仍然不明白一件事:如何释放已经序列化(并提交)到(比如说)FileStorage 的内存?

更具体地说,我希望以下代码停止吃掉我所有的记忆:

for i in xrange(bignumber):
    iobtree[i]=Bigobject() # Bigobject is about 1Mb
    if(i%10==0): 
        transaction.commit() # or savepoint(True)
transaction.commit()

如何做到这一点?是否可以释放 iobtree 存储的引用并将其替换为可按需访问的“弱引用”?

4

1 回答 1

6

创建保存点并提交事务已经清除了很多内存。

  • 您需要检查 ZODB 缓存参数的设置,并根据需要调整这些参数。缓存大小参数指示缓存的对象数,而不是字节数,因此您必须根据对象的大小进行调整。

  • 您可以尝试调用.cacheMinimize()ZODB 连接对象,这会显式停用缓存中任何未修改(或已提交)的对象。

除此之外,请注意即使 Python 从内存中释放对象,操作系统也不会总是回收释放的内存,直到它需要其他东西。操作系统报告的内存使用情况不一定反映 Python 进程的实际内存需求。

于 2012-11-19T19:12:05.697 回答