gpt4 book ai didi

c# - 我什么时候应该使用 CompiledQuery?

转载 作者:IT王子 更新时间:2023-10-29 04:33:52 25 4
gpt4 key购买 nike

我有一张 table :

-- Tag

ID | Name
-----------
1 | c#
2 | linq
3 | entity-framework

我有一个包含以下方法的类:

IEnumerable<Tag> GetAll();
IEnumerable<Tag> GetByName();

在这种情况下我应该使用编译查询吗?

static readonly Func<Entities, IEnumerable<Tag>> AllTags =
CompiledQuery.Compile<Entities, IEnumerable<Tag>>
(
e => e.Tags
);

然后我的 GetByName 方法将是:

IEnumerable<Tag> GetByName(string name)
{
using (var db = new Entities())
{
return AllTags(db).Where(t => t.Name.Contains(name)).ToList();
}
}

生成 SELECT ID, Name FROM Tag 并在代码上执行 Where。或者在这种情况下我应该避免 CompiledQuery 吗?

基本上我想知道什么时候应该使用编译查询。此外,在网站上,它们只为整个应用程序编译一次?

最佳答案

你应该使用 CompiledQuery当以下所有条件为真时:

  • 查询将被执行多次,仅参数值不同。
  • 查询非常复杂,表达式评估和 View 生成的成本“很大”(试错)
  • 您没有使用像 IEnumerable<T>.Contains() 这样的 LINQ 功能这不适用于 CompiledQuery .
  • 您已经简化了查询,这在可能的情况下提供了更大的性能优势。
  • 您不打算进一步组合具有“反编译”效果的查询结果(例如,restrict 或 project)。

CompiledQuery在第一次执行查询时执行它的工作。它对第一次执行没有任何好处。与任何性能调整一样,在您确定要修复实际性能热点之前,通常要避免它。

2012 更新:EF 5 将自动执行此操作(请参阅“Entity Framework 5: Controlling automatic query compilation”)。因此,将“您没有使用 EF 5”添加到上面的列表中。

关于c# - 我什么时候应该使用 CompiledQuery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4932594/

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