Я начал использовать буферную библиотеку протокола, но заметил, что она использует огромное количество памяти.pympler.asizeof показывает, что один из моих объектов составляет около 76k!По сути, он содержит несколько строк, несколько чисел и некоторые перечисления, а также некоторые необязательные списки из них.Если бы я писал то же самое, что и C-структура, я бы ожидал, что он будет меньше нескольких сотен байтов, и действительно, метод ByteSize возвращает 121 (размер сериализованной строки).
Это вы?ожидать от библиотеки?Я слышал, что это медленно, но это непригодно и заставляет меня больше полагать, что я неправильно его использую.
Редактировать
Вот пример, который я построил.Это 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
У меня версия 2.2.0 protobuf (aнемного староват на данный момент) и python 2.6.4.