Sql server 一种优化LINQ性能的方法

Sql server 一种优化LINQ性能的方法,sql-server,linq,linq-to-sql,silverlight-4.0,Sql Server,Linq,Linq To Sql,Silverlight 4.0,我的问题分为几个部分,可能会很长,对此我很抱歉 我使用LINQ将数据传递给Silverlight客户端 第1部分:连接池和优化: 我想知道如何确保LINQ只建立一个到数据库的连接,并遵循连接池。过去,我常常将连接池属性放在SQL连接字符串本身中。所以,如果我把这个设置文件放在这里,当我在DBML文件中添加表时,连接字符串被设置在这里,LINQ会尊重这一点吗 LINQ(DBML)构成了我的数据访问层的核心。我编写的类具有基本上是LINQ查询的方法。 在我处理数据相关部分的代码中,我在“使用”块中使

我的问题分为几个部分,可能会很长,对此我很抱歉

我使用LINQ将数据传递给Silverlight客户端

第1部分:连接池和优化: 我想知道如何确保LINQ只建立一个到数据库的连接,并遵循连接池。过去,我常常将连接池属性放在SQL连接字符串本身中。所以,如果我把这个设置文件放在这里,当我在DBML文件中添加表时,连接字符串被设置在这里,LINQ会尊重这一点吗 LINQ(DBML)构成了我的数据访问层的核心。我编写的类具有基本上是LINQ查询的方法。 在我处理数据相关部分的代码中,我在“使用”块中使用DataContext对象。 这就是LINQ可能使用多连接的原因吗?如果我将DataContext作为类级变量,这是否会确保只有一个连接

第2部分:优化 在不久前的ADO.Net时代,我曾经编写存储过程,通过DataReader执行它,然后在DataReader中循环,填充尽可能多的模型类对象,并将该集合传递给DataGrid进行绑定。 在LINQ时代,就创建对象集合而言,我做的或多或少是相同的。但我自己执行直接LINQ语句。
我可以猜测SQL存储过程会给我带来更快的性能,但是如果我使用LINQ执行存储过程,它会和以前一样快吗?这是一种正确的方法吗。。。。这么多坏习惯

第2部分:在不远的将来进行优化 过去,在ADO.Net的日子里,我曾经写过 存储过程,通过 然后在 DataReader,填充尽可能多的我的 示范班,然后传下去 用于绑定到DataGrid的集合。在里面 林克的日子里,我做的或多或少和他一样 远创建对象集合 他担心。但我直接执行 LINQ语句本身。我能猜到 SQL存储过程将提供 给我更快的性能,但是

基本上,在过去你有一些小的音乐。存储过程在超过10年的时间里没有(!)性能提升。文件中明确说明了这一点。SQL的执行速度与非存储过程一样快,查询计划被缓存并重用

SP只有在避免往返(即从客户端向服务器发送多批请求)的情况下才是好的(如:节省时间)。然后,节省不是因为它们是存储过程,而是因为往返需要花费时间

可悲的是,许多程序员仍然有错觉,因为他们是从其他人那里得到的。。。。10年前,存储过程具有固有的优势。现在是SQLServer6.5时代——从7.0开始,这就是历史

基本上,您处理了损失的开发时间和大量无用的代码,以。。。。几乎没有可测量的优势

第1部分:连接池& 优化:我想知道我该怎么做 确保LINQ只建立一个 连接到数据库,并遵循 连接池

你没有。基本上,不要试图变得比对你有益的更聪明。如果多个连接有意义,那么它们有什么问题

对于池,yu(sql server)通常不必在连接字符串中放入任何内容。是的,LINQ不会神奇地绕过连接字符串中定义的连接池。请看,LINQ从来没有与数据库交谈过——它使用ADO.NET来实现这一点,ADO.NET并没有因为某个更高级别的ORM正在使用它而不是您而神奇地改变行为。连接字符串有池项,ADO.NET仍然可以看到并跟踪它们

现在,从服务器池只有一个数据库连接是一件事:愚蠢。它将ou限制为一次只能处理一个事务,一旦负载增加(即需要同时处理多个请求),它将完全破坏性能

我在中使用DataContext对象 我的代码中的“使用”块 处理数据相关部分。是这个吗 LINQ可能正在使用的原因 多重连接?如果我有 DataContext作为类级别变量, 这将确保只有一个连接吗

啊,看情况。这可能有道理,也可能没有道理。你知道,在认为你有问题之前,尤其是考虑到你在这里提供的大量信息(即没有),做唯一明智的事情:抓起一个分析器并测量你是否有。打开/关闭连接100次或1000次很可能都不会出现在探查器上。无问题=没有理由修复某个问题


也就是说,我不喜欢打开每个方法的连接-它通常显示一个糟糕的类设计。连接应在工作单元内重复使用。

Ohoh。。。。这么多坏习惯

第2部分:在不远的将来进行优化 过去,在ADO.Net的日子里,我曾经写过 存储过程,通过 然后在 DataReader,填充尽可能多的我的 示范班,然后传下去 用于绑定到DataGrid的集合。在里面 林克的日子里,我做的或多或少和他一样 远创建对象集合 他担心。但我直接执行 LINQ语句本身。我能猜到 SQL存储过程将提供 给我更快的性能,但是

基本上,在过去你有一些小的音乐。存储过程在超过10年的时间里没有(!)性能提升。文件中明确说明了这一点。SQL的执行速度与非存储过程一样快,查询计划被缓存并重用

SP只有在避免往返(即从客户端向服务器发送多批请求)的情况下才是好的(如:节省时间)。然后,节省不是因为它们是存储过程,而是因为往返需要花费时间

可悲的是,许多程序员仍然有错觉,因为他们得到了错觉