gpt4 book ai didi

protobuf-net - 使用过滤器反序列化 Protobuf-Net 对象

转载 作者:行者123 更新时间:2023-12-04 04:00:33 29 4
gpt4 key购买 nike

我在我们的一个项目中使用 protobuf-net 来序列化/反序列化一大组同类对象。它运行良好,速度非常快。不过只有一个问题。反序列化时是否可以使用 linq(或任何其他机制)指定过滤条件,以便加载仅满足该条件的对象?反序列化所有对象然后应用 linq 过滤器是相当简单的,但我想减少加载到内存中的对象数量。过滤条件可以是相当动态的,所以字符串类型的机制会很棒(类似于 dlinq?)。

最佳答案

不,没有任何内置内容,但如果您有明确定义的用例,我当然可以查看(我是作者)。

现在,我建议使用以下变体:

var found = Serializer.DeserializeItems<A>(source, PrefixStyle.Base128,
Serializer.ListItemTag).FirstOrDefault(obj => obj.Foo = "bar");

if(found != null) {...}

当找到匹配项时会短路,并会立即释放对象以供收集(希望在 gen-0 中)。或者对于多个项目,也许:

var list = Serializer.DeserializeItems<A>(source, PrefixStyle.Base128,
Serializer.ListItemTag).Where(obj => obj.Foo = "bar").ToList();

(再次立即释放不匹配的项目)

要在一般情况下执行此操作(尤其是对于更复杂的查询),我想不出不具体化对象的明智方法,所以这可能 尽可能接近,除非有一个非常具体(和简单)的场景碰巧与底层数据存储很好地对齐(例如,过滤器总是在“标签 1”上) .

关于protobuf-net - 使用过滤器反序列化 Protobuf-Net 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4849851/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com