web-dev-qa-db-fra.com

Déterminer l'utilisation de la mémoire des objets?

J'aimerais savoir combien RAM est utilisé par chacun de mes objets dans mon espace de travail actuel. Existe-t-il un moyen simple de le faire?

123
Josh Reich

il y a quelque temps, j'ai volé cette petite pépite de ici :

sort( sapply(ls(),function(x){object.size(get(x))})) 

ça m'a bien servi

168
JD Long

1. par taille d'objet

pour obtenir l'allocation de mémoire sur objet par objet , appelez object.size () et transmettez l'objet de intérêt:

object.size(My_Data_Frame)

(sauf si l'argument passé est une variable, il doit être cité, ou bien être entouré d'un appel get .), puis omettez les guillemets,

vous pouvez parcourir votre espace de noms et obtenir la taille de tous les objets qu'il contient, comme ceci:

for (itm in ls()) { 
    print(formatC(c(itm, object.size(get(itm))), 
        format="d", 
        big.mark=",", 
        width=30), 
        quote=F)
}

2. par type d'objet

pour obtenir l'utilisation de la mémoire pour votre espace de noms, par type d'objet, utilisez memory.profile ()

memory.profile()

   NULL      symbol    pairlist     closure environment     promise    language 
      1        9434      183964        4125        1359        6963       49425 
special     builtin        char     logical     integer      double     complex 
    173        1562       20652        7383       13212        4137           1 

(Il y a une autre fonction, memory.size () mais j'ai entendu et lu que cela ne semble fonctionner que sous Windows. Il ne renvoie qu'une valeur en Mo Pour utiliser au maximum la mémoire à tout moment de la session, utilisez memory.size (max = T)).

41
doug

Vous pouvez essayer la fonction lsos() de cette question :

R> a <- rnorm(100)
R> b <- LETTERS
R> lsos()
       Type Size Rows Columns
b character 1496   26      NA
a   numeric  840  100      NA
R> 
21
Dirk Eddelbuettel

Cette question a été postée et a obtenu des réponses légitimes il y a si longtemps, mais je tiens à vous faire connaître d'autres astuces utiles pour obtenir la taille d'un objet à l'aide d'une bibliothèque appelée gdata et de sa ll() une fonction.

library(gdata)
ll() # return a dataframe that consists of a variable name as rownames, and class and size (in KB) as columns
subset(ll(), KB > 1000) # list of object that have over 1000 KB
ll()[order(ll()$KB),] # sort by the size (ascending)
12
Blaszard