Forums Neueste Beiträge
 

Speicherverbrauch berechnen

20/04/2010 - 18:29 von Albert Hermeling | Report spam
uten Abend,

um den Speicher-Verbrauch einer Datenstruktur bestehend aus einem Dictionary
mit darin enthaltenden Tupeln abzuschàtzen habe ich mir folgendes überlegt:

Aufbau der Datenstruktur:

d = {"string1" : (1,2,3,4,5),
"string2" . (1,2,3,4,5),
}

Die Tupel enthalten immer 5 Integer nie etwas anderes

Ein obiger Tupel benötigt 64 Byte (24 für das leere Tupel jeweils 8 Byte pro
Integer)

Gemacht habe ich folgendes:

d.__sizeof__() + len(d) *64

Meiner Meinung nach stimmt das Ergebnis von 376 Bytes. Da die Datenstruktur,
um die es hier geht die 10.000 Elemente überschreiten wird, möchte ich auf
Nummer Sicher gehen und frage lieber noch mal nach, ob da jemand anderer
Meinung ist? Wenn ich mit meiner Rechnung falsch liege, lasse ich die Daten
in der Datenbank und lebe mit der geringeren Performance.

Mit freundlichen Grüßen

Albert

PS 390625 Elemente brauchen 50.166.072 Bytes so viele werden es aber nicht
werden!!
 

Lesen sie die antworten

#1 Peter Otten
20/04/2010 - 20:29 | Warnen spam
Albert Hermeling wrote:

uten Abend,

um den Speicher-Verbrauch einer Datenstruktur bestehend aus einem
Dictionary mit darin enthaltenden Tupeln abzuschàtzen habe ich mir
folgendes überlegt:

Aufbau der Datenstruktur:

d = {"string1" : (1,2,3,4,5),
"string2" . (1,2,3,4,5),
}

Die Tupel enthalten immer 5 Integer nie etwas anderes

Ein obiger Tupel benötigt 64 Byte (24 für das leere Tupel jeweils 8 Byte
pro Integer)

Gemacht habe ich folgendes:

d.__sizeof__() + len(d) *64

Meiner Meinung nach stimmt das Ergebnis von 376 Bytes. Da die
Datenstruktur, um die es hier geht die 10.000 Elemente überschreiten wird,
möchte ich auf Nummer Sicher gehen und frage lieber noch mal nach, ob da
jemand anderer Meinung ist? Wenn ich mit meiner Rechnung falsch liege,
lasse ich die Daten in der Datenbank und lebe mit der geringeren
Performance.

Mit freundlichen Grüßen

Albert

PS 390625 Elemente brauchen 50.166.072 Bytes so viele werden es aber nicht
werden!!



Bei meinem 64-Bit-Python ergibt sich für 10**4 Elemente

sys.getsizeof("string1")






47
sys.getsizeof(42)






24
sys.getsizeof((1,2,3,4,5))






96
sys.getsizeof(dict.fromkeys(range(10000)))






786712
_ / 10000






78
47+24*5+96+78






341

Das liegt in derselben Größenordnung ;)

Aber selbst wenn (!) eine der beiden Abschàtzungen korrekt ist, würde ich
davon die Entscheidung zwischen dict und Datenbank nicht abhàngig machen,
sondern mit der einfacheren Variante beginnen und die aufwendigere nur
versuchen, falls die erste sich in der Praxis als problematisch erweist.

Peter

Ähnliche fragen