问题是这样的:在DataGridView我绑定了一个DataTable后,启动一个线程接收数据不断往里追加显示数据,在我的画面上有一些针对这个DataTable数据过滤的按钮,在数据量不大的情况下,执行过滤画面响应的速度很OK,但是当数据到达几万条时,出现一个情况就是,(第一次过滤响应很快,在完成一次过滤后,我再从接收到的数据按其他条件过滤,响应却很慢)这个现象我的解释是,当前DataGridView中已经有了所有数据,本次过滤,只是把,那些不满足条件的数据给清除掉,所以响应很快,但是,我无法解释的就是我从过滤数据返回到所有的接收数据时。响应却很快,即使我过滤后的数据有1万条,个接收到的数据有好几万条,这是什么情况啊?代码情况如下private void FilterBindingData(TreeNode treeNode)
{
DataRow[] drs = null; // 点击Filter子节点过滤
if (treeNode.Parent != null
&& FilterUtils.FilterNodeName.Equals(treeNode.Parent.Text,
StringComparison.OrdinalIgnoreCase))
{
drs = _dtbReceivedData.Select(FilterUtils.GetFilter(treeNode.Text)); foreach (DataRow dr in drs)
{
_dtbReceivedClone.ImportRow(dr);
}
}
else
{
var rs = from query in _dtbReceivedData.AsEnumerable()
where query.Field<String>("Session").IndexOf(treeNode.Text) >= 0
select query; foreach (DataRow dr in rs)
{
_dtbReceivedClone.ImportRow(dr);
}
}
}
{
DataRow[] drs = null; // 点击Filter子节点过滤
if (treeNode.Parent != null
&& FilterUtils.FilterNodeName.Equals(treeNode.Parent.Text,
StringComparison.OrdinalIgnoreCase))
{
drs = _dtbReceivedData.Select(FilterUtils.GetFilter(treeNode.Text)); foreach (DataRow dr in drs)
{
_dtbReceivedClone.ImportRow(dr);
}
}
else
{
var rs = from query in _dtbReceivedData.AsEnumerable()
where query.Field<String>("Session").IndexOf(treeNode.Text) >= 0
select query; foreach (DataRow dr in rs)
{
_dtbReceivedClone.ImportRow(dr);
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货