DataTable加载非常缓慢
我使用数据表作为页面上某些下拉菜单的数据源,但注意到在回发期间页面非常缓慢。DataTable加载非常缓慢
我已经跟踪它通过在这里:
DataTable dt = new DataTable();
dt.Load(sqlCmd.ExecuteReader()); // this takes ages
SQL命令是一个parametrised查询,而不是存储过程(返回值和地方都相当“动态”所以这不会是可行的),但仍然是一个简单的选择联合查询。 每个下拉菜单通常会返回5到20个选项,具体取决于其他下拉菜单中选择的内容。 当我在管理工作室中运行查询时,它在一秒钟内完成。在这里,每个下拉菜单最多可能需要7秒钟,页面上的6个下拉菜单很快就会累计起来。 我也试图与一个SqlDataAdapter:
SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
sqlDa.Fill(dt); // this takes ages
但这只是慢。 我在2个不同的系统上有这个,并且都有相同的性能问题。
如果有人知道更好(更快)的方法,或知道为什么这是如此缓慢,将是伟大的。
不是我已经看到了这个问题的最好的线程,但有良好的关系里面,&它在我的帖子历史:
SQL Query that runs fine in SSMS runs very slow in ASP.NET
的SQL优化器有时喜欢来决定什么是最好的&你”必须通过追踪和记录数据执行计划来打破查询。它可能被埋在一个不好的索引中,或者你的查询代码可能需要优化。看到我们没有查询代码,并且它可能会或可能没有帮助。我建议你按照上面的帖子中链接的指南并关闭你的问题。
所以我终于找到了问题,有人删除了我的索引。我重新添加了它们,并且一切都很快地再次运行。为什么这只会导致c#中的性能问题,而不会导致SSMS的性能问题我将留给更大的支持 – jimmy 2013-03-06 10:08:58
SSMS缓存您的查询,第一次可能运行缓慢,然后每次都快速,因为难以复制问题。 – RandomUs1r 2013-03-06 16:05:46
这里是如何加载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-25 19:46:25
你可以展示更多的代码,例如SQL查询是什么样子的。也许你在查询本身中有一些低效率的代码 – MethodMan 2013-02-25 19:56:54
@DJKRAZE:当它返回5-20条记录时,查询是否有责任并且是7次SSMS更快? – 2013-02-25 20:01:36