【问题标题】:use threading to fill list of object使用线程填充对象列表
【发布时间】:2014-01-29 21:54:00
【问题描述】:

我正在使用列表来填充 Windows 表单加载中的组合框控件。大约有 20,000 多条记录 填充它,并且在这种情况下,列表的执行速度非常慢。

我使用线程来加速执行,但它没有填满列表 你能帮帮我吗

这是线程

Thread UpdateThread;
      ThreadStart UpdateThreadStart = new ThreadStart(FillCombBox);
      static MethodInvoker CallDataBindToDataGrid = new MethodInvoker(FilDiagtWithdatat);

我把它放在负载中

UpdateThread = new Thread(UpdateThreadStart);
UpdateThread.Name = "Update Thread";
UpdateThread.IsBackground = true;
UpdateThread.Start();

这是我的第二个方法

static void FillCombBox()
        {
            CBList = Items.GeItemsAll(1);

        }

static void FilItemtWithdatat()
        {
            if (CBList.Count!=0)
            {
                MyForm.CB_Item.DataSource = ItemList;
                MyForm.CB_Item.ValueMember = "ItemID";
                MyForm.CB_Item.DisplayMember = "ItemName";
                MyForm.CB_Item.SelectedIndex = -1;
            }

        }

myform : 我不过这行在顶部static ItemHome MyForm;
CBList : 是公共列表,格式为

【问题讨论】:

  • 这是哪种编程语言?您可能需要添加相应的标签。
  • C# 并连接到 SQL
  • 即使您在后台线程中完成工作,在某些时候您仍然会从数据库中返回 20k 条记录。这需要多少时间?
  • 我严重怀疑列表本身就是问题所在。一个包含 20000 个元素的列表是元素真的没什么好说的,除非记录很大。
  • 懒惰评估会更好吗?只显示你真正需要的——我相信你没有组合框一次显示 20k 个对象。不确定组合框,但据我所知 - 流布局面板看起来很相似并支持它。

标签: c# multithreading performance list


【解决方案1】:

我在处理 3,000 条记录时遇到了同样的问题。我发现在循环期间将组合框中的自动完成模式设置为无,然后在循环完成后将其重新打开,使其与直接查询 sql 数据库一样快。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2015-07-16
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多