【发布时间】:2017-04-19 13:16:25
【问题描述】:
我有一个 ListBox,我用一个返回大约 5000 行的 sql server 存储过程填充它。我的存储过程是这样的。
SELECT UserID,LanID
FROM User
ORDER BY LanID
现在我从这个过程创建一个 DataTable,并将该 DataTable 用作 ListBoxes 数据源。
public DataTable getAllUsers(string environment)
{
List<Criteria> userList = new List<Criteria>();
using (SqlConnection sqlConnection = new SqlConnection(GetConnectionString(environment)))
{
sqlConnection.Open();
using (SqlDataAdapter adapter = new SqlDataAdapter("usp_GetUser", sqlConnection))
{
var dataTable = new DataTable();
adapter.Fill(dataTable);
return dataTable;
}
}
}
我就是这样称呼这个方法的
private void setUsersListBox()
{
DataTable dtOfUsers = groupDetailDataAccess.getAllUsers("Development");
UsersListBox.DataSource = dtOfUsers;
UsersListBox.DataBind();
}
所有这一切的问题是,一旦页面加载,我可以在网页上做我需要做的事情大约 10 秒,然后它会冻结大约 20 秒。之后它工作正常,直到页面被刷新或重新加载。我将其缩小到导致问题的这个列表框/查询。
有没有一种方法可以让我更有效地提高性能?
【问题讨论】:
-
您的列表框中真的需要 5000 行吗?我认为这会使盒子笨重且难以使用。有没有更好的方法让用户在这里选择数据?
-
你能在单独的线程上运行查询吗?
-
@BeanFrog 我主要想要一个列表框,以使其与页面的其余部分保持一致。我需要用户能够选择多个用户,所以我认为列表框是最好的选择
-
程序执行需要多长时间?我同意,虽然包含 5,000 个项目的列表框对用户来说相当麻烦。
-
您希望他们从 5000 个列表中进行选择?
标签: c# sql-server performance listbox