我有一个DataSet包含2个相关DataTable(主数据和详细信息)。我想将与我的过滤器匹配的数据(例如主数据列A =“XXX”)复制到另一个数据集。
现在我发现这个过程需要很长时间(1k记录大约需要1小时)。
我想知道如何改善处理时间?
答案 0 :(得分:2)
我说复制1000条记录应该只需几毫秒。 确保没有事件触发或数据绑定做奇怪的事情.. 也许你应该尝试没有关系,但我相信enforcecontraints = false也禁用外键检查..
以下代码可以非常快速地复制完整的数据集:
fDstDataSet.EnforceConstraints = false;
foreach (DataTable fSrcTable in fSrcDataSet.Tables)
{
DataTable fDstTable = fOpenOrders.Tables[fSrcTable.TableName];
foreach (DataRow fSrcRow in fSrcTable.Rows)
{
fDstTable.ImportRow(fSrcRow);
}
}
fDstDataSet.EnforceConstraints = true;
答案 1 :(得分:1)
您可能想尝试一下;
myDataSet.Tables[0].Select("A = 'xxx'");
返回DataRow[]
答案 2 :(得分:0)
您可能会在更详细地概述问题时获得一些好处 - 可能有更好的选择,然后重复您的数据。
如果你真的想沿着这条路走下去,你可能想看一下DataView类:
http://msdn.microsoft.com/en-us/library/system.data.dataview.aspx
这将允许您根据数据表中的过滤器提取数据。 DataView还有一个方法ToTable:
http://msdn.microsoft.com/en-us/library/system.data.dataview.totable.aspx
这将根据DataView中的选定行返回一个数据表。
这应该比你的版本更好,虽然我不确定其他选项是否会再次提供更快的实现。我相信上面的DataTable.Select将比DataView
表现更好