Csharp/C#教程:使用protobuf-net进行质量过滤分享


使用protobuf-net进行质量过滤

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

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

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

public string EventName; 

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

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

 var item = Serializer.DeserializeItems(source) .First(item => item.Id == id); 

做得很好; 这个:

或者对于多个项目:

 var list = Serializer.DeserializeItems(source) .Where(item => item.Foo == foo); 

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

如果你想在选定的元素列表上添加一些投影,你应该尝试我的库, https://github.com/Scooletz/protobuf-linq 。 它们也可以在NuGet上使用。 该库极大地降低了反序列化的开销。 在某些情况下,它可以降至原始查询的50%。

不幸的是,没有一个。 为了使用LINQ,您的对象必须实现IQueryableIEnumerable 。 除非有一个可以在.bin文件中提供IQueryable接口的LINQ提供程序,否则你必须:

protobuf可以将文件的内容作为流IEnumerable提供给您,因此您可以轻松地执行此操作。 不幸的是我不知道如何调用该方法,但在文档中很容易找到。

上述就是C#学习教程:使用protobuf-net进行质量过滤分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1018432.html

(0)
上一篇 2022年1月3日
下一篇 2022年1月3日

精彩推荐