【问题标题】:How can I populate a listbox with a sql query more efficiently?如何更有效地使用 sql 查询填充列表框?
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-05-11
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多