gpt4 book ai didi

c# - 使用具有字符串属性的对象进行更快的集合搜索

转载 作者:行者123 更新时间:2023-11-30 21:53:27 34 4
gpt4 key购买 nike

我有以下内容

public class SearchResult
{
public string Description { get; set; }
public int Year{ get; set; }
public int Type { get; set; }
}

我创建了这些列表的列表并将其缓存,然后我尝试使用以下内容搜索这个集合(1.2M)记录

var found = myList.Where(x => x.Description.StartsWith(query)).Take(10).ToList();

我想要的速度很慢,有没有更好的方法来存储对象列表并能够搜索对象的字符串属性?

我应该在缓存之前对集合进行排序吗?我希望能够以最快的路径执行 .StartsWith 和 .Contains 描述属性以获取前 10 名匹配项。

如果我只是更快地访问数据库(我在文本字段上放置了一个索引),我希望通过获取一次结果来提高我的性能,将它们粘贴在内存中,然后所有搜索都针对缓存完成在内存中 vs 每次都去数据库。但这被证明比使用 SQL LIKE '{query}%' 语句的数据库调用慢

最佳答案

字符串比较本来就很慢,此外,您必须完全遍历整个列表以查看是否存在匹配项。这永远不会表现良好,事实上,随着新记录添加到源中,随着时间的推移,它很可能会变得更糟。

Here 对于那些关心速度的人来说,这是一篇关于字符串搜索的好文章。

我建议按照您提到的那样进行,将搜索移至数据库并限制返回的行数。虽然这仍然是 I/O,但数据库已针对处理此类事情进行了优化。其他一些优势是,您最终不会遇到应用崩溃和丢失缓存搜索的陷阱,同样,您可以利用 async/await,这将使您的应用响应更快。

如果您决定仍然要走将所有内容都拉入内存然后查询对象的路线,祝您好运。我唯一的其他建议是考虑搜索缓存,这样如果有人最近搜索相同的东西 - 您可以缓存这些结果并立即返回它们。

来自同一作者,这是另一个阅读来源 - 他在这里比较了集合字符串查找速度。

http://cc.davelozinski.com/c-sharp/fastest-collection-for-string-lookups

关于c# - 使用具有字符串属性的对象进行更快的集合搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33839897/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com