C# 将trie保存到磁盘
这听起来是个简单的问题,但我不知道如何寻找答案 我有一个C#中的trie实现,它将存储一个字典文件中的大约80K个单词。加载所有这些单词需要相当长的时间(超过5分钟)。我想知道,“持久化”这些数据的最佳方式是什么,这样我就不必每次启动应用程序时都重新加载所有单词了C# 将trie保存到磁盘,c#,performance,data-structures,persistence,trie,C#,Performance,Data Structures,Persistence,Trie,这听起来是个简单的问题,但我不知道如何寻找答案 我有一个C#中的trie实现,它将存储一个字典文件中的大约80K个单词。加载所有这些单词需要相当长的时间(超过5分钟)。我想知道,“持久化”这些数据的最佳方式是什么,这样我就不必每次启动应用程序时都重新加载所有单词了 谢谢 与所有其他性能问题一样,理想的解决方案是分析您当前的解决方案和您提出的其他候选解决方案。瓶颈在哪里?I/O?对文本进行词法分析?在trie中形成链接?如果不了解您的性能目标、trie使用的性质和当前存在的瓶颈,就很难提出具体的建
谢谢 与所有其他性能问题一样,理想的解决方案是分析您当前的解决方案和您提出的其他候选解决方案。瓶颈在哪里?I/O?对文本进行词法分析?在trie中形成链接?如果不了解您的性能目标、trie使用的性质和当前存在的瓶颈,就很难提出具体的建议 要审议的问题:
- 优点:用户将看到更快的启动时间
- 缺点:可能需要交叉线程 同步,用户将看到 直到加载完成,才完成trie 完全完成。根据trie的用途,这可能是也可能不是一个showstopper
- 优点:用户将看到更快的启动时间
- 缺点:可能需要交叉线程 同步,用户将看到 直到加载完成,才完成trie 完全完成。根据trie的用途,这可能是也可能不是一个showstopper
- 结构的顶层是一个
键在哪里 是n-表中的字母数 搜索词李>字典
- 中的每个值
字典是一种
,其中键是字符串 有n个字母,值为 以该字符串开头的字符串。 e、 键“st”值的g可能是 “开始”、“停止”和“字符串”查找
这样就不需要定制trie。我发现性能差异(搜索时间)是可以忽略的,但加载速度大大有利于我的设计(更不用说使用简单的.NET类型的简单性和可维护性)。由于性能和序列化/反序列化时间缓慢,我最近重构了一个类似的数据结构 我的解决方案是完全放弃trie,使用本机.NET集合—字典和查找 我正在处理大约40万个单词。从内存中构建数据结构大约需要5秒钟,数据结构是由大量字典和查找索引的对象列表
- 结构的顶层是一个
键在哪里 是n-表中的字母数 搜索词李>字典
- 中的每个值
字典是一种
,其中键是字符串 有n个字母,值为 以该字符串开头的字符串。 e、 键“st”值的g可能是 “开始”、“停止”和“字符串”查找
这样就不需要定制trie。我发现性能差异(搜索时间)是可以忽略的,但加载速度极大地有利于我的设计(更不用说使用简单的.NET类型的简单性和可维护性)。我只想用旧的MFC二进制方式序列化它。基本上,读/写应该尽可能快,剩下的就是在输入时分配和初始化结构,这是无论如何都需要做的 也就是说
Read/Write number N of subnodes
For each subnode
If reading, allocate a subnode in this node
Read/Write the character for the subnode
Serialize the subnode
End