2009-12-16 81 views
2

我正在使用LINQ to SQL来访问数据库(SQL Server 2005)。第一次通话最多需要10秒才能检索数据,第二次通话只需不到一秒钟。LINQ to SQL:首先调用

可以做些什么来提高首次调用数据库的性能? 数据库操作发生在asp.net mvc应用程序的控制器中。

谢谢

+0

谢谢大家。以下是我如何解决“慢”系统: Linq2SQL类之间的链接使底层系统加载了大量数据,而这些数据并不是我的视图所需要的。我重写了LINQ查询并将结果存储在自定义数据传输对象中。这样,现在应用运行得更快。 – Martin 2009-12-18 15:24:19

回答

0

不确定这种超时是LINQ或ASP.NET相关。您是否还注意到在ADO.NET中使用数据库时出现超时?

+1

这是猜测,但我想也是,这是首先导致延迟的ASP编译。 – Onots 2009-12-16 13:18:47

+0

对不起,我在这个话题上是相当新的。切换到ADO.NET来比较性能很容易吗? – Martin 2009-12-16 13:24:14

+0

是的,只需编写一个小型控制台程序,并在MSDN中检查示例代码。看看SqlConnection,SqlCommand,SqlReader类。 – 2009-12-16 15:00:45

1

我相信你正在经历的是SQL Server缓存查询,并且是正常的。现在,如果原来的10秒太多了,那么你需要捕获sql查询(我会建议分析器),然后检查它。在过去,我会在管理控制台中运行sql并选择显示实际执行计划。网上有资源解释如何阅读,但它应该可以帮助你找到瓶颈。 HTH

编辑 我的意思是说长时间运行的查询在运行一次之后加速是正常的,因为SQL Server将查询缓存(我相信执行计划是准确的)以备后用。

Wade

+0

谢谢,查询很简单,所以我想这是一个SQL服务器的东西。我已阅读了“视图生成”,其中需要超过查询时间的一半。可以用EdmGen.exe预先生成视图,但这在L2S中是不可能的...... – Martin 2009-12-16 13:29:08

0

我很怀疑Linq-to-SQL是这里的罪魁祸首。您可以发布正在生成的T-SQL L2S,以及有关索引的行数和信息吗?

+0

很抱歉,我没有足够的用户权限来运行sql server profiler。但正如我上面写的,查询并不复杂。奇怪的是,在同一个表上的第二次调用要快得多...... – Martin 2009-12-16 13:35:04

+0

第二次调用因为缓存而更快(正如Wade73指出的那样)。我同意许多其他海报,如果10秒太慢,修复将索引你正在查询的表。请记住,简单的查询也需要很长时间;处理时间是表中行数,返回行数,重新调整行(排序,分组等)所需的处理以及可用于检索行的索引的函数。 – 2009-12-16 13:42:24

+0

谢谢杰夫,我会尝试索引表格,稍后再回来。 – Martin 2009-12-16 13:55:44

0

我认为你遇到的是第一次加载页面时的Asp.Net编译过程,而不是LTS的性能问题。测量性能的一种方法是使用Linq to Sql Profiler进行分析。它会告诉你到底生成的查询是什么以及查询和代码的执行时间。