什么在使用所有这些内存进行 google ndb 提取?

What is using all this memory for a google ndb fetch?

当我从数据存储中提取 1000 个模型时,它使用的内存比预期的多很多。我的数据存储表明我有 >18000,但总大小为 8.31MB

Application 18025 8.31 MB

这是获取实体的代码,禁用了缓存

def memoryForAThousandApplicationsNoCache():
  ndb_ctx = ndb.get_context()
  ndb_ctx.set_cache_policy(lambda key: False)
  ndb_ctx.set_memcache_policy(lambda key: False)
  startUsage = memory_usage().current()
  applications = Application.query().fetch(1000)
  return "Memory usage after applications:  %d MB" % (memory_usage().current() - startUsage)

然后我得到

Memory usage after applications: 10 MB

什么在消耗所有这些内存?我在滥用 memory_usage 吗?

我猜您没有任何理由分析或深入研究 Python App Engine 之外的内存使用情况。除了来自对象的许多好处之外,在将事物表示为 Python 对象时还有大量的开销(对 low-level 程序员而言)。当您使用 ndb 之类的东西时,幕后还有额外的 (Python) 数据结构。

Google for "python memory overhead" 以查找更多背景信息。有一个不错的图表 in this question 可能具有指导意义。