c# - 如何在 C# 中滚动我自己的索引?

标签 c# indexing

我需要一种更快的方法来创建索引文件。该应用程序生成要索引的项目对。我目前将生成的每一对添加到已排序的字典中,然后将其写出到磁盘文件中。在添加的项目数量超过一百万之前,这种方法一直有效,此时它会减慢到无法接受的程度。可以有多达三百万个数据项被索引。我更愿意避免使用数据库,因为我不想显着增加部署包的大小,它现在不到 1 兆字节的二分之一。我试过 Access,但它比排序字典还要慢 - 如果它有一个高效的批量加载实用程序,那么它可能会起作用,但我没有找到这样的 Access 工具。

是否有更好的方法来滚动我自己的索引?

最佳答案

SortedDictionary 真的是瓶颈吗?与 I/O 相比 ?
您真的应该首先对此进行概要分析,以防止优化错误的部分。

但作为提示,当您有 1M 或更多项目时,预分配您的词典是个好主意。给它一个2M左右的初始容量。

//var index = new SortedDictionary(2 * 1024 * 1024);  // not supported, it's a tree
var index = new SortedList(2 * 1024 * 1024);

如果您的词典是问题所在,我希望它比实际的索引搜索更快地从不断的重新分配中产生。

关于c# - 如何在 C# 中滚动我自己的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2965845/

相关文章:

C# Interop - 释放在非托管代码中分配的内存

c# - 我们是否必须在应用程序级别处理蓝牙 LE 通信中的 MTU?

C# Selenium WebDriver 测试在连续运行时失败但在单独运行时成功

c# - Microsoft.ApplicationInsights 错误 : InstrumentationKey cannot be empty

indexing - 将大型 800gb json 文件从远程服务器上传到 elasticsearch

c# - WPF 工具包折线图的性能

postgresql - 在 PostgreSQL+Timescaledb 上使用索引的最佳方式

mysql索引似乎在大表中失败

sql - 添加非聚集索引会锁定我的表吗?

mysql - 如何使用 activerecord 在 JOIN 中指定 'USE INDEX'