ipython内核占用了几个(差不多十个)Gb内存。我认为这是来自大型对象(矩阵,列表,numpy数组......),我可能在某些操作中产生,现在我不再需要了。
我想列出我已定义的所有对象,并按其内存占用对它们进行排序。有一个简单的方法吗?对于某些类型,有-(void) viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden: YES animated:NO];
}
方法,但不适用于所有...所以我正在寻找一种通用的方法来列出我所做的所有对象和它们的内存占用。
答案 0 :(得分:38)
假设您使用的是ipython
或jupyter
,您需要做一些工作才能获得所有对象的列表 您 < / strong>已定义。这意味着在globals()
中提取所有内容并过滤掉modules
,builtins
,ipython objects
等对象。一旦确定拥有这些对象,就可以继续用sys.getsizeof
抓住他们的尺码。这可以总结如下:
import sys
# These are the usual ipython objects, including this one you are creating
ipython_vars = ['In', 'Out', 'exit', 'quit', 'get_ipython', 'ipython_vars']
# Get a sorted list of the objects and their sizes
sorted([(x, sys.getsizeof(globals().get(x))) for x in dir() if not x.startswith('_') and x not in sys.modules and x not in ipython_vars], key=lambda x: x[1], reverse=True)
请记住,对于python对象(使用python的内置函数创建的对象),sys.getsizeof
将非常准确。但是使用第三方库创建的对象可能有点不准确。此外,请注意,如果对象由垃圾收集器管理,sys.getsizeof
会增加额外的垃圾收集器开销。所以,有些事情看起来可能比实际情况要重一些。
作为旁注,numpy
的{{1}}方法可能有些误导,因为它不包含数组对象的非元素属性所消耗的内存。
我希望这会有所帮助。