减少C#应用程序的内存占用
我正在开发一个需要处理大约4,000,000个英文句子的C#应用??程序.所有这些句子都存储在树中.树中每个节点都是具有以下字段的类:
class TreeNode { protected string word; protected Dictionary<string,TreeNode> children; } 我的问题是,当它达到第200万个句子时,应用程序正在使用所有的RAM(我有2 GB RAM).所以它只能处理一半的句子,然后它显着减慢. 我可以做些什么来尝试减少应用程序的内存占用? 编辑:让我来解释一下我的申请.所以我有大约30万个英文句子,从每个句子我正在生成更多的子句,如下所示: 例: >足球是非常受欢迎的运动 每个句子都逐字地存储在树中.所以考虑到上面的例子,我有一个TreeNode类,其中的字段为“足球”,子列表中的”Node“为TreeNode. “is”节点的子节点是“a”节点. “a”节点的子节点是“非常”节点.我需要逐字存储句子,因为我需要能够搜索从例子开始的所有句子:“Football is”. 所以基本上对于一个句子中的每个单词,我正在创建一个新的(子句子).这就是我最终最终得到400万个不同句子的原因.将数据存储在数据库中是不可选的,因为应用程序需要一次在整个结构上工作.如果我不得不把所有的数据写入数据库,它将进一步减缓这个过程. 谢谢 解决方法
你用什么作为关键?你从哪里获取数据?如果这些是单词(不是完整的),我想知道你是否有很多重复的键(具有相同的基本值的不同的字符串实例),在这种情况下,您可能会从实现本地的内部函数重新使用值(并让瞬态拷贝收集垃圾).
public sealed class StringCache { private readonly Dictionary<string,string> values = new Dictionary<string,string>(StringComparer.Ordinal); public string this[string value] { get { string cached; if (!values.TryGetValue(value,out cached)) { values.Add(value,value); cached = value; } return cached; } } } 在构建树时实例化,并使用(当您认为值可能被重复时): StringCache cache = new StringCache(); // re-use this instance while building // your tree ... string s = ... // whatever (from reading your input) s = cache[s]; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |