DataTable加载速度非常慢

时间:2013-02-25 19:44:24

标签: c# asp.net sql-server-2008

我使用数据表作为页面上某些下拉列表的数据源,但是注意到在回发期间页面非常慢。

我已经跟踪到了这里:

DataTable dt = new DataTable();
dt.Load(sqlCmd.ExecuteReader()); // this takes ages

sql命令是一个参数化查询,而不是一个存储过程(返回值和哪里是非常'动态'所以这是不切实际的),但仍然是一个简单的选择联合查询。 通常每个下拉列表返回5到20个选项,具体取决于在其他下拉列表中选择的内容。 当我在管理工作室中运行查询时,它在一秒钟内完成。在这里,每个下拉列表最多可能需要7秒钟,页面上有6个下拉列表,很快就会增加。 我也尝试过使用SqlDataAdapter:

SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
sqlDa.Fill(dt); // this takes ages

但这也很慢。 我在2个不同的系统上都有这个,并且两者都有相同的性能问题。

如果有人知道一个更好(更快)的方法,或者知道为什么这么慢就会很棒。

2 个答案:

答案 0 :(得分:1)

这不是我在这个问题上看过的最好的主题,但内部有很好的链接,&这是我的帖子历史:

SQL Query that runs fine in SSMS runs very slow in ASP.NET

SQL Optimizer有时喜欢决定什么是最好的&你必须通过一些跟踪和记录数据执行计划来突破你的查询。它可能很好地被埋没为坏索引,或者您的查询代码可能需要优化。因为我们没有查询代码,并且拥有它可能有用也可能没用。我建议您按照上述帖子中链接的指南进行操作并关闭您的问题。

答案 1 :(得分:0)

这里有一个示例,说明如何快速加载DataTable,注意我如何显示我想要返回的特定Columns

private DataTable GetTableData()
{
  string sql = "SELECT Id, FisrtName, LastName, Desc FROM MySqlTable";
  using (SqlConnection myConnection = new SqlConnection(connectionString))
  {
    using (SqlCommand myCommand = new SqlCommand(sql, myConnection))
    {
      myConnection.Open();
      using (SqlDataReader myReader = myCommand.ExecuteReader())
      {
        DataTable myTable = new DataTable();
        myTable.Load(myReader);
        myConnection.Close();
        return myTable;
      }
    }
  }
}

如果您想DataAdapter使用Fill the DataTable这是一个简单的示例

private void FillAdapter()
{
    using (SqlConnection conn = new SqlConnection(Your ConnectionString))
    {
      conn.Open();
          using (SqlDataAdapter dataAdapt = new SqlDataAdapter("SELECT * FROM EmployeeIDs", conn))
      {
         DataTable dt = new DataTable();
         dataAdapt.Fill(dt);
        // dataGridView1.DataSource = dt;//if you want to display data in DataGridView 
      }
    }
}