【发布时间】:2010-01-02 00:56:53
【问题描述】:
我正在开发一个需要处理大约 4,000,000 个英文句子的 C# 应用程序。所有这些句子都存储在一棵树中。树中的每个节点都是一个具有这些字段的类:
class TreeNode
{
protected string word;
protected Dictionary<string, TreeNode> children;
}
我的问题是应用程序在到达第 2,000,000 句时耗尽了所有 RAM(我有 2 GB RAM)。所以它只处理了一半的句子,然后它就大大减慢了。
我可以做些什么来尝试减少应用程序的内存占用?
编辑:让我再解释一下我的应用程序。所以我有大约 300,000 个英文句子,并且从每个句子中我生成更多的子句子,如下所示:
示例: 一句话:足球是一项非常受欢迎的运动 我需要的子句:
- 足球是一项非常受欢迎的运动
- 是一项非常受欢迎的运动
- 一项非常受欢迎的运动
- 非常流行的运动
- 流行运动
- 运动
每个句子逐字存储在树中。所以考虑上面的例子,我有一个 TreeNode 类,其中包含单词 field = "Football",而子列表中包含单词 "is" 的 TreeNode。 “is”节点的子节点是“a”节点。 “a”节点的子节点是“very”节点。我需要逐字存储句子,因为我需要能够搜索以示例开头的所有句子:“足球是”。
所以基本上对于句子中的每个单词,我都会创建一个新的(子句)。这就是我最终得到 4,000,000 个不同句子的原因。将数据存储在数据库中不是一种选择,因为应用程序需要同时处理整个结构。如果我不得不继续将所有数据写入数据库,它将进一步减慢该过程。
谢谢
【问题讨论】:
-
补充Marc的评论,为什么不存储在数据库中,让它管理内存分页? NOTE" 抱歉,Marc 我似乎编辑了您的评论,而不是添加新评论。我可以恢复吗?
-
你真的需要一次记住所有的句子吗?
-
为什么将它们存储为树?您的应用的目的是什么?
-
@Mitch - 我想你吃了我的评论;-p 但基本上我说:你真的需要内存中的所有数据吗?我在想可能有一种流媒体方式来做到这一点......
-
@Spi1988 - 感谢您抽出宝贵时间提供有关这方面的帮助的反馈。这对网站真的很有用,考虑到将来可能会访问这个问题的人。干杯。
标签: c# memory-management