【问题标题】:LINQ to SQL: First callLINQ to SQL:第一次调用
【发布时间】:2009-12-16 12:54:56
【问题描述】:

我正在使用 LINQ to SQL 访问数据库 (SQL Server 2005)。第一次调用最多需要 10 秒来检索数据,第二次调用需要不到一秒。

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

谢谢

【问题讨论】:

  • 谢谢大家。以下是我解决“慢”系统的方法:Linq2SQL 类之间的链接使底层系统加载了大量我的视图并不真正需要的数据。我重写了 LINQ 查询并将结果存储在自定义的数据传输对象中。这样,应用程序现在运行得更快了。

标签: asp.net sql-server-2005 linq-to-sql


【解决方案1】:

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

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

韦德

【讨论】:

  • 谢谢,查询很简单,所以我猜它是一个 SQL 服务器的东西。我已经阅读过需要一半以上查询时间的“视图生成”。可以使用 EdmGen.exe 预先生成视图,但这在 L2S 中是不可能的...
【解决方案2】:

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

【讨论】:

  • 这是猜测,但我也猜测是 ASP 编译导致延迟。
  • 对不起,我对这个话题很陌生。改用 ADO.NET 比较性能容易吗?
  • 是的,只需编写一个小控制台程序并查看 MSDN 中的示例代码。看看 SqlConnection、SqlCommand、SqlReader 类。
【解决方案3】:

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

【讨论】:

  • 很抱歉,我在数据库上没有足够的用户权限来运行 sql server profiler。但正如我在上面所写的,查询一点也不复杂。奇怪的是,在同一张桌子上的第二次调用要快得多......
  • 第二次调用由于缓存而更快(正如 Wade73 所指出的那样)。我同意许多其他海报,如果 10 秒太慢,修复将索引您正在查询的表。请记住,简单的查询也可能需要很长时间;处理时间是表中的行数、返回的行数、返回的行所需的处理(排序、分组等)以及可用于检索行的索引的函数。
  • 谢谢你,Jeff,我会尝试索引表格,稍后再回来。
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多