gpt4 book ai didi

c# - LINQ查询的优化

转载 作者:行者123 更新时间:2023-11-30 22:57:58 40 4
gpt4 key购买 nike

有没有办法优化以下 LINQ 查询?当数组很大时效率不高。

public class Test
{
public int Id { get; set; }
}
public static Test[] GetObjects(Test[] t, int[] ids)
{
return t.Where(q => ids.Contains(q.Id)).ToArray();
}

最佳答案

不要返回数组。使用 IEnumerable<Test> .这将对内存使用有很大帮助,特别是如果您可以在整个程序的 API 表面上进一步传播该更改。任何你确实需要数组的地方,很容易调用 .ToArray() 函数调用之后,但同样...您这样做的次数越少,您保存数组分配和复制的可能性就越大。

public static IEnumerable<Test> GetObjects(IEnumerable<Test> t, IEnumerable<int> ids)
{
return t.Where(q => ids.Contains(q.Id));
}

您可以通过转换 ids 来进一步改进变量为 HashSet<int> .这是否有帮助取决于集合的大小:

public static IEnumerable<Test> GetObjects(IEnumerable<Test> t, IEnumerable<int> ids)
{
var idHash = new HashSet<int>(ids);
return t.Where(q => idHash.Contains(q.Id));
}

甚至更好,因此您可能会重新使用哈希集或构建 ids首先将集合作为哈希集:

public static IEnumerable<Test> GetObjects(IEnumerable<Test> t, HashSet<int> ids)
{
return t.Where(q => idHash.Contains(q.Id));
}

在数据库世界中,我知道您也可以通过首先对 ids 进行排序来优化它集合,但我不确定现在 .Net 和 linq 能够利用 IOrderedEnumerable 是什么样子。

关于c# - LINQ查询的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53266681/

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