我的代码中遇到了一个可怕的问题。当我执行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查询,运行正常!
我真的不知道出了什么问题! 非常感谢您的支持!
答案 0 :(得分:1)
一次显示数千条记录并不是一个好主意 - 这可能是性能问题的主要原因。缓解这种情况的一种方法是将数据检索到DataTable,数据表缓存并在分页中使用它来显示,比如说每页50条记录。 (这样您就不必为每个页面更改/重新绑定命中数据库)。
即使这种方法适用于有限数量的记录,如果该数字变得很大 - 即使将所有记录检索到内存中的DataTable也不是一个选项,您将不得不实现服务器端分页以仅检索一部分数据来自DB一次。
也就是说,从.NET代码调用查询而不是SSMS中的直接执行调用减速的另一个常见原因可能是参数嗅探。如果SQL Server构建和缓存的执行计划不是最佳的查询执行 - 它可能真的会减慢它。尝试在构建SQL语句的代码末尾添加以下行:
strSql += " OPTION (RECOMPILE) ";
缓解这个问题。