【发布时间】:2010-11-11 20:48:43
【问题描述】:
我目前正在玩一些 SQLAlchemy,这真的很整洁。
为了测试,我创建了一个包含我的图片存档的巨大表,由 SHA1 哈希索引(以删除重复 :-))。这是令人印象深刻的快...
为了好玩,我对生成的 SQLite 数据库执行了相当于 select * 的操作:
session = Session()
for p in session.query(Picture):
print(p)
我希望看到哈希滚动,但它只是继续扫描磁盘。与此同时,内存使用量猛增,几秒钟后就达到了 1GB。这似乎来自 SQLAlchemy 的身份映射功能,我认为它只是保留弱引用。
谁能给我解释一下?我以为每张图片p都会在写出hash后被收集!?
【问题讨论】:
-
我自己也注意到了同样的问题。如果我做
len(Session.query(Model).limit(100).all()),我会得到1。如果我删除limit,内存使用量会猛增。
标签: python performance orm sqlalchemy