我開始使用協議緩衝區庫,但注意到它使用了大量的內存。 pympler.asizeof表明我的一個物體大約有76k!基本上,它包含一些字符串,一些數字和一些枚舉,以及一些可選的列表。如果我寫的是與C結構相同的東西,我預計它會少於幾百字節,並且實際上ByteSize方法返回121(序列化字符串的大小)。谷歌協議緩衝區巨大python
是你期望從圖書館?我聽說它很慢,但這是無法使用的,使我更傾向於認爲我濫用了它。
編輯
這裏是我構造的示例。這是一個Pb文件類似,但比簡單的我一直在使用
package pb;
message A {
required double a = 1;
}
message B {
required double b = 1;
}
message C {
required double c = 1;
optional string s = 2;
}
message D {
required string d = 1;
optional string e = 2;
required A a = 3;
optional B b = 4;
repeated C c = 5;
}
在這裏,我使用它
>>> import pb_pb2
>>> a = pb_pb2.D()
>>> a.d = "a"
>>> a.e = "e"
>>> a.a.a = 1
>>> a.b.b = 2
>>> c = a.c.add()
>>> c.c = 5
>>> c.s = "s"
>>> import pympler.asizeof
>>> pympler.asizeof.asizeof(a)
21440
>>> a.ByteSize()
42
我的protobuf的2.2.0版本(這個有點老點)和python 2.6.4。
一些演示代碼再生的行爲將是很好。 – phihag
@ PHPhag這是類似的再現行爲。 –