【问题标题】:Binding and Searching Large DataTable大数据表的绑定和搜索
【发布时间】:2011-10-13 10:31:41
【问题描述】:

我已经在 WPF 中实现了自动完成下拉列表

当绑定大数据(比如超过 30 MB)时会出现问题

处理大数据的最佳方法是什么(搜索等操作)

是否可以序列化 30 MB 数据并作为用户类型在自动完成下拉列表中搜索

输入序列化数据并将结果数据附加到下拉列表并显示给用户

请建议...

【问题讨论】:

    标签: wpf serialization datatable


    【解决方案1】:

    通常您应该将耗时的操作放在 BackgroundWorker.DoWork 事件处理程序中,而不是像上面那样设置控件属性。如果要设置在 BackgroundWorker.DoWork 事件处理程序的另一个线程中创建的控件属性,则应使用 Control.Invoke 方法异步设置属性。尽管如此,以下代码是更好的解决方案:

       toolStripStatusLabel1.Text = "Loading ... ";
    
    
    enter code here` backgroundWorker1.RunWorkerAsync();
    
    enter code here`backgroundWorker1_DoWork(/*arguments*/)
    {
    // getting data from database and fill dataset
    }
    
    backgroundWorker1_RunWorkerCompleted(/*arguments*/)
    {
                dt_kh = ds.Tables[0];
    
                cboMaKH.DataSource = ds.Tables[0];
                cboMaKH.DisplayMember = "MaKH";
                cboMaKH.ValueMember = "MaKH";
    
    
                cboTenCty.DataSource = ds.Tables[0];
                cboTenCty.DisplayMember = "TenCty";
                cboTenCty.ValueMember = "TenCty";
    
                cboMaKH.AutoCompleteMode = AutoCompleteMode.SuggestAppend; 
                cboMaKH.AutoCompleteSource = AutoCompleteSource.CustomSource;
                cboMaKH.AutoCompleteSource = AutoCompleteSource.ListItems;
                cboTenCty.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
                cboTenCty.AutoCompleteSource = AutoCompleteSource.CustomSource;
                cboTenCty.AutoCompleteSource = AutoCompleteSource.ListItems;
    
                txtTenKH.DataBindings.Add("Text", ds.Tables[0], "TenKH");
                txtDiaChi.DataBindings.Add("Text", ds.Tables[0], "Diachicty");
                txtDienThoai.DataBindings.Add("Text", ds.Tables[0], "DienThoaiCty");
                txtTaiKhoan.DataBindings.Add("Text", ds.Tables[0], "TaiKhoanCty");
                txtVIMST.DataBindings.Add("Text", ds.Tables[0], "MSTCty");
    }
    

    【讨论】:

      【解决方案2】:

      您的自动完成文本框是否使用ICollectionView.Filter 来搜索值?

      如果是,那么大数据集同步肯定会很慢。

      充分利用 PLINQ。

      当用户在文本框中键入文本时,对以 \ 开头的条目执行 PLINQ 查询,其中包含键入的文本,然后在 PLINQ 查询返回后重新绑定 itemssource。

      如果您不能使用 PLINQ 或没有 .Net 4.0,则在不同的线程上执行简单的 LINQ 搜索并重新绑定自动完成框的 Dispatcher

      【讨论】:

      • 您好,感谢您的评论。但是如果我在我的应用程序中获取大约 30 mb 的数据,应用程序内存将会增加。那么在客户端获取所有数据是否可行?
      • 是的,为什么不呢?它是一个桌面应用程序对吗?对于 32 位系统,您至少有 4GB 的虚拟内存。
      猜你喜欢
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      相关资源
      最近更新 更多