我想分批枚举一个数据表。为此,我创建了一个返回IEnumerable<DataTable>
That 方法的方法,如下所示:
public IEnumerable<DataTable> EnumerateRowsInBatches( DataTable table, int batchSize ) {
int rowCount = table.Rows.Count;
int batchIndex = 0;
while( batchIndex * batchSize < rowCount ) {
DataTable result = table.Clone();
int batchStart = batchIndex * batchSize;
int batchLimit = ( batchIndex + 1 ) * batchSize;
if( rowCount < batchLimit )
batchLimit = rowCount;
for( int i = batchStart; i < batchLimit; i++ ) {
result.ImportRow( table.Rows[ i ] );
}
batchIndex++;
yield return result;
}
}
这实际上非常有效。我正在遍历这些批次,以便使用表值参数发送到 SQL Server。但我看到它ImportRow
占用了大部分时间,我想加快速度。
我正在寻找如何做到这一点。我可以自由地将所有数据视为只读数据,因此我觉得在这里复制行并不是绝对必要的。