2017-04-19 75 views
0

我有一个ListBox,我正在填充一个SQL Server存储过程,返回大约5000行。我的存储过程如下所示。如何更有效地使用sql查询填充列表框?

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秒。之后,它可以正常工作,直到页面刷新或重新加载。我缩小到这个问题的列表框/查询。

有没有一种方法可以使这种效率更高以提高性能?

+2

你真的需要在你的列表框中有5000行吗?我认为这会让这个盒子笨重而难以使用。有没有更好的方式让用户在这里选择数据? – BeanFrog

+1

你可以在单独的线程上运行查询吗? –

+0

@BeanFrog我主要想要一个列表框,以保持页面的其余部分一致。我需要用户能够选择多个用户,所以我认为列表框是最好的选择 – user6641597

回答

1

每一个逻辑动作(需要时间来处理)应该在一个单独的线程上,所以它不会锁定主UI线程。