gpt4 book ai didi

c# - 为什么我用string和array,特别是大数据,linq search效率差别这么大?

转载 作者:太空狗 更新时间:2023-10-30 01:18:32 25 4
gpt4 key购买 nike

我想搜索包含关键字的学生姓名,首先我将关键字以逗号分隔,但我发现搜索时间太长。但是当我将这些关键字转换为数组时,它是真实的快。为什么linq搜索效率差别这么大?是数组的问题还是linq的问题?

使用字符串进行搜索

var keyWord="Lyly,Tom,Jack,Rose"; //and so on,more than 500 names
var student= Context.Students.Where(i => keyWord.Contains(i.Name));//very slow

使用数组进行搜索

var keyWord="Lyly,Tom,Jack,Rose"; //and so on,more than 500 names
var keyWordArray=keyWord.split(',');
var student= Context.Students.Where(i => keyWordArray.Contains(i.Name));//fast

最佳答案

是的,就是因为数组。 Linq 数据库提供程序可以将数组转换为一种非常有效的形式。

即,在数据库术语中,

第一个查询将使用 SQL Like , 但第二个查询将使用 SQL IN .它们之间的差异是巨大的。

SQL Like 必须对整个字符串进行全扫描,以满足一个学生的需求。

SQL IN 不必进行任何扫描,因为 IN 在幕后使用集合。

请注意,这仅适用于数据库。如果您使用 Linq2Object 对上述比较进行基准测试,您可能看不到任何差异,可能只有几毫秒。

如果你想让 Linq2Object 也有性能,你应该使用 HashSet,像这样:

var keyWord = "Lyly,Tom,Jack,Rose";
var keyWordSet = new HashSet<string>(keyWord.split(','));

var students = Context.Students
.ToList()
.Where(i => keyWordSet.Contains(i.Name));

关于c# - 为什么我用string和array,特别是大数据,linq search效率差别这么大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26889335/

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