Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LinqToSql预编译查询的好处是什么?_C#_Linq_Linq To Sql - Fatal编程技术网

C# LinqToSql预编译查询的好处是什么?

C# LinqToSql预编译查询的好处是什么?,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我在一本简而言之的书中浏览了从C#4.0中获取的LINQPad提供的示例LINQ查询,并遇到了一些我从未在LinqtoSQL中使用过的东西。。。编译查询 以下是确切的exmaple: // LINQ to SQL lets you precompile queries so that you pay the cost of translating // the query from LINQ into SQL only once. In LINQPad the typed DataContext

我在一本简而言之的书中浏览了从C#4.0中获取的LINQPad提供的示例LINQ查询,并遇到了一些我从未在LinqtoSQL中使用过的东西。。。编译查询

以下是确切的exmaple:

// LINQ to SQL lets you precompile queries so that you pay the cost of translating
// the query from LINQ into SQL only once. In LINQPad the typed DataContext is
// called TypeDataContext, so we proceed as follows:

var cc = CompiledQuery.Compile ((TypedDataContext dc, decimal minPrice) =>    
    from c in Customers
    where c.Purchases.Any (p => p.Price > minPrice)
    select c
);

cc (this, 100).Dump ("Customers who spend more than $100");
cc (this, 1000).Dump ("Customers who spend more than $1000");

像这样预编译LINQ到SQL查询实际上给我带来了什么好处?我会从比这个稍微复杂的查询中得到性能提升吗?这是否在实际操作中使用

简而言之,当您需要多次运行单个查询时,预编译查询可以为您带来性能提升

下面是一些关于LINQ到SQL性能的介绍

我在好几个地方读到过 编译LINQ会有帮助,但我 从来没听过有人说过怎么做 速度的大幅度提高是可能的。 例如,在我最喜欢的一个 法布里斯的书(林克在行动) “玛格丽和其他人,”他继续说道 第296页Rico Mariani的博客文章 标题为DLINQ(Linq到SQL性能 (第1部分)如使用编译的 查询提供了几乎两倍于 执行非编译查询, 接着说它带来了 性能在使用 原始数据读取器。好吧,足够了 说我自己从来没有做过测试,我 本可以和你一起住两次,但不是 37次

所以,从这个看来,你 应该始终将LINQ编译为SQL 询问。嗯,那不完全是真的。 我的建议是如果你 有理由执行相同的操作 反复询问你应该 强烈考虑编译。 例如,您只是在向 SQL调用一次,没有任何好处 因为你必须编译它。 叫它十次?好吧,你会的 你得自己决定


我使用编译查询的方式是静态的:我静态地声明编译后的查询,因此查询树结构只需解析一次,基本上您有一个准备好的语句,只需要一些额外的参数。
这主要在网站上使用,因此查询只需编译一次。性能的提高当然取决于查询的复杂性。

我们在公司使用这一功能,对于运行的查询,通常不需要在每次运行时进行编译。在这起作用之前,您不必对linq to sql过于复杂,但是at将取决于服务器上的流量和负载。

来自Rico Mariani的性能花絮

第四题:

预编译的缺点是什么 询问

A:

预编译不会受到任何惩罚 (见小测验13)。你唯一可能 如果您预编译,则会丢失性能 无数的查询,然后几乎没有使用 根本不需要,你会浪费很多 毫无理由地失去了记忆

但衡量标准是:)


+1用于链接,并注意到该好处适用于多次运行查询。事实上,运行一次性查询根本没有任何好处。还要注意,给出的示例实际上只比较了查询编译时间;查询的表中没有数据,因此查询执行或数据传输的时间基本为0。这些将不会从预编译中受益。但编译是大多数查询所需的大部分时间。