У меня большой класс переменных ~ 90i sh, например, так:
[Serializable]
[ProtoContract]
public class myLargeClass
{
[ProtoMember(1)]
public int BetId { get; set; }
...
[ProtoMember(95)]
public string someVariable { get; set; }
}
У меня есть большое количество этих объектов, которые я сохраняю на диске для своего приложения. Это сериализовано с использованием protobuf в один большой список и размещено на моем диске локально.
List<myLargeClass>
Идея состоит в том, что вместо десериализации всей вещи в большой класс я сделал более простую версию, которая содержит только подмножество переменных. Но также и байт [] сериализованного большого объекта, так что я могу получить доступ ко всем переменным в случае необходимости:
[Serializable]
[ProtoContract]
public class mySmallerClass
{
[ProtoMember(1)]
public int Id { get; set; }
...
[ProtoMember(10)]
public bool someVariable { get; set; }
public byte[] largeObject { get; set; }
}
Мое текущее решение медленное в том, что я сериализую и в малый и в большой класс:
var smallObjects = Serializer.Deserialize<List<mySmallerClass>>(data);
var largeObjects = Serializer.Deserialize<List<myLargeClass>>(data);
Parallel.ForEach(smallObjects, (object) =>
{
var x = largeObjects.Where(b => b.Id == object.Id).Single();
object.largeObject = Crypto.Serialize(x);
});
Это решение очень медленное, особенно если у вас есть сотни тысяч или миллионы объектов.
Как эффективно преобразовать сериализацию больших объектов в меньший объект?