c# - 应用程序的内存搜索索引占用太多内存 - 有什么建议吗?

标签 c# optimization search memory search-engine

在我们的桌面应用程序中,我们使用 inverted index 实现了一个简单的搜索引擎。 .

不幸的是,我们的一些用户的数据集可能会变得非常大,例如在创建倒排索引之前占用约 1GB 的内存。倒排索引本身占用大量内存,几乎与被索引的数据一样多(另外 1GB RAM)。

显然,这会产生内存不足错误的问题,因为达到了每个应用程序 2GB 内存的 32 位 Windows 限制,或者使用较低规范计算机的用户难以满足内存需求。

我们的倒排索引存储为:

Dictionary<string, List<ApplicationObject>>

这是在处理每个对象时在数据加载过程中创建的,以便将 applicationObject 的关键字符串和描述词存储在倒排索引中。

所以,我的问题是:是否可以更有效地按空间存储搜索索引?也许需要使用不同的结构或策略?或者是否可以创建一种 CompressedDictionary?由于它存储了大量字符串,我希望它具有高度可压缩性。

最佳答案

如果它是 1GB... 把它放在磁盘上。使用像 Berkeley DB 这样的东西。它仍然会非常快。

这是一个为其提供 .net 接口(interface)的项目:

http://sourceforge.net/projects/libdb-dotnet

关于c# - 应用程序的内存搜索索引占用太多内存 - 有什么建议吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/222182/

相关文章:

javascript - Canvas 快速纹理映射

java - 迭代字符串替换后可能的最短结果长度

javascript - 确定经度和纬度坐标是否在以英里和公里为单位的半径内

c# - Json Controller 方法中的空参数,而 Jquery 参数具有值

javascript - 针对给定问题的替代和优化解决方案

c# - 使用 window.external 将 javascript Date 对象传递给 C# WebBrowser 控件

php - Bing 搜索 API 限制并限制为每个域单个页面

python - 如何让 Python 在程序所在位置查找文件?

c# - .net多线程学习资料

c# - 如何在我的 Linux Web 服务器上运行 .dll 文件