我需要一种更快的方法来创建索引文件。应用程序生成要编制索引的项目对。我目前将生成的每一对添加到已排序的字典中,然后将其写入磁盘文件。这种方法很有效,直到添加的项目数超过一百万,此时它会减慢到不可接受的程度。可以有多达300万个数据项被索引。我更喜欢避免使用数据库,因为我不想显着增加部署包的大小,现在不到一兆字节的一半。我尝试过Access,但它比排序的字典更慢 - 如果它有一个有效的批量加载实用程序,那么可能会有效,但我找不到这样的Access工具。
有没有更好的方法来推广自己的索引?
答案 0 :(得分:6)
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);
如果您的词典是问题,我希望它能够比实际的索引搜索更快地重新分配。
答案 1 :(得分:1)
只是一个想法,但你可以使用像SQL Lite一样的内存中SQL解决方案吗? 它只是一个小DLL,但它将帮助您优先考虑,在C#中执行逻辑并在SQL中进行排序。
看看这里:
http://web.archive.org/web/20100208133236/http://www.mikeduncan.com/sqlite-on-dotnet-in-3-mins/
Download for SQL Lite本身只有253k,.net绑定大约是75k。
答案 2 :(得分:0)
SQLite是否太大而无法使用您的软件进行部署?我将同意Henk的看法,SortedDictionary中的不断重新分配可能是瓶颈。如果该解决方案被证明是错误的,请尝试使用SQLite来查看是否会提高性能,然后您可以决定从那里开始。