我想获取当前环境中所有列表的内存使用情况。 class Foo:
def __init__(self, a):
self.a = a
@property
def b():
return "b" if self.a else None
@property
def c():
return "c" if self.a else None
@property
def d():
return "d" if self.b else None
@property
def e():
return "e" if self.b else None
@property
def f():
return "f" if self.b else None
有data.table
汇总内存中的所有表,包括大小。这就是我现在正在使用的内容,但我想知道是否有更好的方法:
tables
我已经看过Determining memory usage of objects?和Tricks to manage the available memory in an R session,但他们似乎更多地分别了解特定项目的使用情况或管理内存。我想要的是获取所有列表(此示例)或遵循某个命名约定的所有项目的内存使用情况。 谢谢!
答案 0 :(得分:1)
一种方法是使用eapply
搜索所需环境中的所有对象,检查每个对象是否为列表,如果为TRUE则返回object.size
,否则返回NA。
eapply(as.environment(-1),
FUN=function(x) if(is.list(x)) format(object.size(x), units = "Mb") else NA)
$a
[1] "7.2 Mb"
$b
[1] "72.5 Mb"
$f
[1] NA
as.environment(-1)
告诉eapply
遍历调用它的环境,这是全局环境。
此外,ls.str
可能在此处返回列表对象的str
:
ls.str(mode = "list")
a : List of 2
$ : int [1:1000000] 1 2 3 4 5 6 7 8 9 10 ...
$ : int [1:899999] 2 3 4 5 6 7 8 9 10 11 ...
b : List of 2
$ : int [1:10000000] 1 2 3 4 5 6 7 8 9 10 ...
$ : int [1:8999999] 2 3 4 5 6 7 8 9 10 11 ...
数据强>
#rm(list=ls())
f <- function() return(1)
a <- list(1:1e6, 2:9e5)
b <- list(1:1e7, 2:9e6)