【问题标题】:Fast .NET serializer for a big trie [closed]用于大尝试的快速 .NET 序列化程序 [关闭]
【发布时间】:2015-02-03 00:44:33
【问题描述】:

我们在服务器端服务中进行了大量尝试,其中包含数千万个节点。整个 trie 大约需要 4 GB 的 RAM。到目前为止,我们仅使用基本的二进制 .NET 序列化将 trie 存储在文件中并将其重新构建回内存中。但这太慢了......在我们的例子中,有什么更好的序列化算法,某种直接的mmap 类似的技巧会很棒,但.NET 不允许自定义内存分配器。目的是尽量减少保存,尤其是从文件中加载 trie(文件大小不是我们关心的问题)。

注意:由于延迟,我们绝对不能使用关系数据库。

更新:嗯,我们发现了这个类似的问题Persisting a trie to a file - C。 C 社区似乎更适合这类问题;) => 接受 protobuf.net 解决方案。

【问题讨论】:

  • 数据库太慢了。抱歉,伙计们,试试吧:en.wikipedia.org/wiki/Trie
  • @DJKRAZE 请在进行错误编辑之前学习算法。
  • @john:某些数据结构,例如高程图,在数据库结构中是不合适的。
  • @eeq 我认为我们需要更多地了解您存储的内容,尤其是在附加节点中。即使一个磁盘驱动器寻道也不可接受,这是新信息,但仍不能告诉我们您要达到什么目的或数据是什么。
  • 我只想把它扔在那里:也许内存管理/垃圾收集环境也不适合您的需求。即使使用并发 GC,您也可能会遇到这种情况您似乎过早优化的瓶颈......

标签: c# .net serialization trie


【解决方案1】:

.net 公认的“最快的序列化程序”是 ProtoBuf.net,在很长一段时间内是最快和最小的序列化程序。 http://damienbod.wordpress.com/2014/01/09/comparing-protobuf-json-bson-xml-with-net-for-file-streams/

【讨论】:

    猜你喜欢
    • 2011-01-16
    • 1970-01-01
    • 2020-08-29
    • 2021-02-11
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    相关资源
    最近更新 更多