|
|
1
4
您的结构对于缓存来说足够有效,但我不会在性能关键的地方使用它。如果您的缓存增长,并且在一个位置上有5000个项目,那么您仍然在对5000个项目进行线性搜索。 我认为最好对列表进行排序,并使用二进制搜索来搜索缓存中的项目。 如果我要实现类似的东西,我将采用一个带有指向记录指针的tlist。列表将用tlist.sort排序,我给出了一个过程,该过程根据记录包含的数据对列表进行排序。排序将在“选择性”最高的字段上进行,然后在“选择性”第二的字段上进行,依此类推。 如果您想找到一个条目,您可以在列表中执行二进制搜索并获取该值,如果该值不存在,则可以从数据库中获取该值并将其添加到缓存中。 当然,这一切都将很好地包装在一个类中,这个类负责处理这个问题和内存分配问题。 哈希图也是可能的,但是你必须做一些测试来看看哪个更快。 |
|
|
2
1
你的想法似乎是合理的,应该有效地工作。本质上,您将实现一个带有索引的简单数据库表。它将索引信息与数据分开,以便相对于在排序结构中移动数据而言,更新索引的成本“很小”。 另一种可能是使用内存中的数据库。Delphi有很多可用的工具。他们会为您做很多这样的事情,并且可能提供更大的灵活性。 |
|
|
3
0
如果性能是一个问题,请尽量避免字符串比较。相反,我会将缓存数组排序为您想要的任何搜索顺序,并对原始数据执行二进制搜索。 如果字符串值最重要,那么使用soundex算法将字符串拆分为单个字符和数字,并将两者编码为单词或整数(简单哈希)。按此对数组进行排序,并按位置字符串对任何冲突进行排序。这样,您就不会对明显的不匹配项执行字符串匹配。 |
|
|
GG33 · 在docker中缓存npm包 2 年前 |