3

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

我已经追踪到这里:

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 个不同的系统上都有这个,并且两者都有相同的性能问题。

如果有人知道更好(更快)的方法,或者知道为什么速度如此之慢,那就太好了。

4

2 回答 2

2

不是我在这个问题上看到的最好的线程,但里面有很好的链接,它在我的帖子历史中:

在 SSMS 中运行良好的 SQL 查询在 ASP.NET 中运行速度非常慢

SQL 优化器有时喜欢决定什么是最好的,你必须通过一些跟踪和记录数据执行计划来打破你的查询。它很可能像坏索引一样被埋没,或者您的查询代码可能需要优化。看到我们没有查询代码,并且拥有它可能会或可能不会有帮助。我建议您按照上述帖子中链接的指南并关闭您的问题。

于 2013-02-25T19:49:02.627 回答
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 
      }
    }
}
于 2013-02-25T20:01:39.447 回答