2017-04-19 76 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線程。