使用protobuf-net进行质量过滤

Gil*_*man 5 .net c# protobuf-net

我用protobuf-net序列化了一个对象列表.

从理论上讲,.bin文件可以包含数百万个对象.

假设对象属于包含以下内容的类:

public string EventName;
Run Code Online (Sandbox Code Playgroud)

我必须进行查询并创建一个包含与查询匹配的对象的列表.使用LINQ从序列化文件中提取匹配对象的正确方法是什么?

Mar*_*ell 5

protobuf格式是项目的线性序列; 任何索引等你只能单独申请.但是,IEnumerable<T>可用; 你可能会发现:

var item = Serializer.DeserializeItems<YourType>(source)
       .First(item => item.Id == id);
Run Code Online (Sandbox Code Playgroud)

做得很好; 这个:

  • 懒得假笑 每个项目都是单独产生的,因此您不需要大量的内存
  • 短路; 如果在开始附近找到该项目,它将立即退出

或者对于多个项目:

var list = Serializer.DeserializeItems<YourType>(source)
    .Where(item => item.Foo == foo);
Run Code Online (Sandbox Code Playgroud)

(如果要缓冲内存中的匹配项,请在上面添加ToList,如果只想以前向方式解析一次,则不使用ToList)