C# Listview更新C花费的时间太长#

C# Listview更新C花费的时间太长#,c#,sql,database,multithreading,listview,C#,Sql,Database,Multithreading,Listview,我有一个问题,我被困了很久,希望你们能帮我 我有一个listview,它在程序第一次加载时填充数据库中的数据 在我的程序中,我有一个按钮,它通过清除listview中的所有数据并运行程序加载时填充listview的相同方法来“刷新”此listview。但是,此刷新按钮的刷新时间太长(约10秒) 程序如何能在2秒钟内加载并填充listview?然而,当再次运行该方法时,它需要更长的时间 请参阅我的附加代码,并建议任何更改,我为长度道歉。多谢各位 public void AllHomeworkers

我有一个问题,我被困了很久,希望你们能帮我

我有一个listview,它在程序第一次加载时填充数据库中的数据

在我的程序中,我有一个按钮,它通过清除listview中的所有数据并运行程序加载时填充listview的相同方法来“刷新”此listview。但是,此刷新按钮的刷新时间太长(约10秒)

程序如何能在2秒钟内加载并填充listview?然而,当再次运行该方法时,它需要更长的时间

请参阅我的附加代码,并建议任何更改,我为长度道歉。多谢各位

public void AllHomeworkers()
{
    //This updates the homeworkers listview to contain all the records from the homeworkers table.

    listHomeworkersAll.BeginUpdate(); //This uses the begin update process on the listview, this is used to stop flickering
    listHomeworkersAll.Items.Clear(); //Clears all the items from the listview

    // this takes the datatable returned from AllHomeworkers stored procedure.
    // It then loops through the datatable adding every row to the list view.

    DataTable dtHomeworkers = _businessLayer.AllHomeworkers();
    for (int i = 0; i < dtHomeworkers.Rows.Count; i++)
    {
        DataRow drowHomeworkers = dtHomeworkers.Rows[i];

        if (drowHomeworkers.RowState != DataRowState.Deleted)
        {
            ListViewItem lvi = new ListViewItem(drowHomeworkers["StaffID"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Title"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Initials"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Forename"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Surname"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Address"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Address2"].ToString());
            lvi.SubItems.Add(drowHomeworkers["City"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Postcode"].ToString());
            lvi.SubItems.Add(drowHomeworkers["CostCentre"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Email"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Telephone"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Mobile"].ToString());
            lvi.SubItems.Add(drowHomeworkers["FMID"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Comments"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Leaver"].ToString());
            lvi.SubItems.Add(drowHomeworkers["LeavingDate"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Base"].ToString());
            lvi.SubItems.Add(drowHomeworkers["NextVisit"].ToString());
            var deleted = drowHomeworkers["Deleted"].ToString();
            if (deleted != "")
            {
                lvi.ForeColor = Color.Red;
            }
            listHomeworkersAll.Items.Add(lvi);
        }
    }
    listHomeworkersAll.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);  
    // this sorts the columns to the size of the largest object stored inside them.

    listHomeworkersAll.EndUpdate();
    // this ends the listview update process.
}
public void allhomeworks()
{
//这将更新homeworkers列表视图,以包含homeworkers表中的所有记录。
listHomeworkersAll.BeginUpdate();//这在listview上使用开始更新过程,用于停止闪烁
listHomeworkersAll.Items.Clear();//清除listview中的所有项
//这将获取从AllHomeworkers存储过程返回的数据表。
//然后,它在datatable中循环,将每一行添加到列表视图中。
DataTable dtHomeworkers=\u businessLayer.AllHomeworkers();
for(int i=0;i
您可能需要在刷新之前和填充所有数据之后执行此操作

向父控件添加多个控件时,建议在初始化要添加的控件之前调用SuspendLayout方法。将控件添加到父控件后,调用ResumeLayout方法。这将提高具有许多控件的应用程序的性能


我想这可能会快很多

    public void AllHomeworkers()
    {

        //This updates the homeworkers listview to contain all the records from the homeworkers table.

        listHomeworkersAll.BeginUpdate(); //This uses the begin update process on the listview, this is used to stop flickering
        listHomeworkersAll.Items.Clear(); //Clears all the items from the listview

        // this takes the datatable returned from AllHomeworkers stored procedure.
        // It then loops through the datatable adding every row to the list view.

        DataTable dtHomeworkers = _businessLayer.AllHomeworkers();

        List<ListViewItem> listHomeworkers = new List<ListViewItem>();

        for (int i = 0; i < dtHomeworkers.Rows.Count; i++)
        {
            DataRow drowHomeworkers = dtHomeworkers.Rows[i];

            if (drowHomeworkers.RowState != DataRowState.Deleted)
            {
                ListViewItem lvi = new ListViewItem(drowHomeworkers["StaffID"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Title"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Initials"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Forename"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Surname"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Address"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Address2"].ToString());
                lvi.SubItems.Add(drowHomeworkers["City"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Postcode"].ToString());
                lvi.SubItems.Add(drowHomeworkers["CostCentre"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Email"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Telephone"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Mobile"].ToString());
                lvi.SubItems.Add(drowHomeworkers["FMID"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Comments"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Leaver"].ToString());
                lvi.SubItems.Add(drowHomeworkers["LeavingDate"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Base"].ToString());
                lvi.SubItems.Add(drowHomeworkers["NextVisit"].ToString());
                var deleted = drowHomeworkers["Deleted"].ToString();
                if (deleted != "")
                {
                    lvi.ForeColor = Color.Red;
                }
                listHomeworkers.Add((ListViewItem)lvi);
            }
        }

        ListViewItem[] arr = listHomeworkers.ToArray();

        listHomeworkersAll.Items.AddRange(arr);

        listHomeworkersAll.EndUpdate();
        // this ends the listview update process.
    }
public void allhomeworks()
{
//这将更新homeworkers列表视图,以包含homeworkers表中的所有记录。
listHomeworkersAll.BeginUpdate();//这在listview上使用开始更新过程,用于停止闪烁
listHomeworkersAll.Items.Clear();//清除listview中的所有项
//这将获取从AllHomeworkers存储过程返回的数据表。
//然后,它在datatable中循环,将每一行添加到列表视图中。
DataTable dtHomeworkers=\u businessLayer.AllHomeworkers();
List listHomeworkers=新列表();
for(int i=0;i