GridView中的Databind()很慢!! VB.NET

时间:2013-08-13 15:08:01

标签: vb.net performance gridview data-binding

我的代码中遇到了一个可怕的问题。当我执行DataBind方法时,页面加载并加载,并在大约5分钟后填充GridView。这不是SQL查询问题!

我使用Visual Studio debuger测试,代码在DataBind()

上停止
Protected Sub btnShow_Click(ByVal sender As Object, ByVal e As System.EventArgs)

        /* This is not the correct code but at the end, the result will be same as below */

        Dim feedback As String = "positive"
        Dim date As String = "2013"

        bindDataShowDetails(feedback, date) // <----- I call this method ( below )

  End Sub
Protected Sub bindDataShowDetails(ByVal feedback As String, ByVal Data As String())

        feedbackGlobal = feedback

        Dim strSql As String = ""

        strSql = " select "
        strSql += " feedback, zendesk_ticket_id,feedback_text as Comment, date_ins as Ticket_date, date_feedback as Feedback_date, comment_review, review_status "
        strSql += "  from feedbacks_support "
        strSql += " where "
        strSql += " feedback = '" & feedback & "'" // <---- 'positive'
        strSql += " and YEAR(date_feedback) = " & Date // <---- '2013'


        Dim myreader As SqlDataReader = admin2.ExecReader(strSql) // <--- Class 'admin2' calls the method (ExecReader) thats executes the SQL query and return the result.

        GridView1.DataSource = myreader
        GridView1.DataBind() <----------- Problem is here!!!

        Me.ModalPopupExtender1.Show()


    End Sub

我在SQL Server中直接运行SQL查询,运行正常!

我真的不知道出了什么问题! 非常感谢您的支持!

1 个答案:

答案 0 :(得分:1)

一次显示数千条记录并不是一个好主意 - 这可能是性能问题的主要原因。缓解这种情况的一种方法是将数据检索到DataTable,数据表缓存并在分页中使用它来显示,比如说每页50条记录。 (这样您就不必为每个页面更改/重新绑定命中数据库)。

即使这种方法适用于有限数量的记录,如果该数字变得很大 - 即使将所有记录检索到内存中的DataTable也不是一个选项,您将不得不实现服务器端分页以仅检索一部分数据来自DB一次。

也就是说,从.NET代码调用查询而不是SSMS中的直接执行调用减速的另一个常见原因可能是参数嗅探。如果SQL Server构建和缓存的执行计划不是最佳的查询执行 - 它可能真的会减慢它。尝试在构建SQL语句的代码末尾添加以下行:

strSql += " OPTION (RECOMPILE) ";

缓解这个问题。