GridView + ObjectDataSource问题 - 对于大型和小型结果集同样糟糕的性能

时间:2009-05-03 21:49:03

标签: asp.net sql performance gridview

最近,我被要求使用旧的.NET遗留Web应用程序。最近的表现相当低,因为系统中的数据量翻了两番。过去两年一直很好。

使用.xsd文件与存储过程进行通信,该存储过程充分缩小了结果(尽管没有分页),并通过ObjectDataSource将它们提供给GridView。

我无法理解的部分 ,加载1个结果,140或1200需要大约7秒钟。第二个是0个结果案例。 (GridView处理分页)

使用SQL分析器,我们能够看到查询花了6.9秒。在SQL Management Studio中使用相同的参数运行相同的查询需要100毫秒。我改变了参数,以确保它不仅仅是一个缓存的结果。漫长的等待时间可靠地重现。

我知道implementing paging需要在这里完成,但是现在我只是回顾性地试图找到一个解释为什么页面执行同样差的小的和大套......

(GridView的“简单”显示可以满足他们的需求 - 无需控制HTML)

2 个答案:

答案 0 :(得分:2)

我们遇到了同样的问题:

  1. 检查您的统计信息是否是最新的:
  2.     SELECT 
            ObjectName = Object_Name(ind.object_id),
            IndexName = ind.name,
            StatisticsDate = STATS_DATE(ind.object_id, ind.index_id)
        FROM SYS.INDEXES ind
        order by STATS_DATE(ind.object_id, ind.index_id) desc
    
    1. 删除SQL Server缓存:
    2.     DBCC DROPCLEANBUFFERS
          DBCC FREEPROCCACHE
      
      1. 如果两者都没有帮助,您可以尝试使用“内部LOOP连接”和“with(index = ...)”等提示来强制执行SSMS查询计划。

答案 1 :(得分:1)

您可以尝试查看从您的应用程序发送的执行计划和参数类型。例如,如果应用程序正在传递nvarchar以与varchar列进行比较,则可能会导致问题。 http://weblogs.sqlteam.com/tarad/archive/2007/11/16/60408.aspx