C# 数据表加载非常慢
我使用datatable作为页面上某些下拉列表的数据源,但我注意到在回发过程中页面速度非常慢 我一直跟踪到这里:C# 数据表加载非常慢,c#,asp.net,sql-server-2008,C#,Asp.net,Sql Server 2008,我使用datatable作为页面上某些下拉列表的数据源,但我注意到在回发过程中页面速度非常慢 我一直跟踪到这里: DataTable dt = new DataTable(); dt.Load(sqlCmd.ExecuteReader()); // this takes ages sql命令是一个带参数的查询,不是一个存储过程(返回值和where都是“动态”的,因此这是不可行的),但仍然是一个简单的select union查询。 通常每个下拉列表返回5到20个选项,具体取决于在其他下拉列表中选
DataTable dt = new DataTable();
dt.Load(sqlCmd.ExecuteReader()); // this takes ages
sql命令是一个带参数的查询,不是一个存储过程(返回值和where都是“动态”的,因此这是不可行的),但仍然是一个简单的select union查询。
通常每个下拉列表返回5到20个选项,具体取决于在其他下拉列表中选择的选项。
当我在ManagementStudio中运行查询时,它在不到一秒钟的时间内完成。在这里,每个下拉列表最多需要7秒,页面上有6个下拉列表,很快就会加起来。
我也尝试过使用SqlDataAdapter:
SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
sqlDa.Fill(dt); // this takes ages
但这也同样缓慢。
我在两个不同的系统上都有此功能,并且在两个系统上都有相同的性能问题
如果有人知道更好(更快)的方法,或者知道为什么速度如此之慢,那就太好了。这不是我在这个问题上见过的最好的帖子,但是里面有很好的链接,在我的帖子历史中有:
SQL优化器有时喜欢决定什么是最好的&您必须通过跟踪和记录数据执行计划来打破查询。它很可能像坏索引一样被隐藏,或者您的查询代码可能需要优化。鉴于我们没有查询代码,拥有它可能会有帮助,也可能没有帮助。我建议您遵循上面帖子中链接的指南并结束您的问题。下面是一个如何快速加载数据表的示例请注意我如何显示要返回的特定
列
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
来填充数据表
,下面是一个简单的示例
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
}
}
}
请多加一点上下文和代码。代码位于何处,是否有任何内容是静态的,在开发服务器上,只有一个用户的页面速度是否也很慢?能否显示更多代码,例如SQL查询是什么样子的。。也许查询中有一些低效的代码itself@DJKRAZE:当查询返回5-20条记录并且在SSMS中速度快7倍时,是否有可能是该查询造成的?因此,我最终发现了问题,有人删除了我的索引。我重新添加了它们,一切都很快恢复了。为什么这只会导致c#而不是SSMS的性能问题我将把问题留给更大的MindSSMS缓存您的查询,第一次它可能运行得很慢,然后每次都很快,因为这使得复制问题变得很困难。