use*_*224 2 c# datatable performance
我想知道你们中是否有人知道手动填充数据表的更快方法,然后我知道。
这是我得到的,我有一个大约有 1.7b 个条目的列表。我想用一列尽快将这些条目填充到 DataTable 中。我列表中的一个条目在这里看起来像这样{"A2C","DDF","ER","SQ","8G"}
我的代码需要大约 7-8 秒
for (int i = 0; i <= lists.Count; i++)
{
table_list.Rows.Add();
}
for (int a = 0; a < list.Count; a++)
{
table_list.Rows[a][0] = list[a][0] + list[a][1] +
list[a][2] + list[a][3] + list[a][4];
}
Run Code Online (Sandbox Code Playgroud)
由于我没有在板上找到任何类似的问题(只是关于如何通过 sql 和填充方法填充数据表的问题),我决定发布我的问题。
任何输入都受到高度赞赏!
我将此 DataTable 添加到 sql server 数据库中(我通过 SqlBulkCopy 执行此操作)
这是个错误; 该DataTable是纯粹的开销在这里。您应该公开的是IDataReader该数据。这个 API 有点棘手,但FastMember使它更容易。例如,听起来您有 1 列;所以考虑:
class Foo {
public string ColumnName {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
现在编写一个迭代器块方法,将其从每个项目的原始列表转换:
IEnumerable<Foo> Convert(List<TheOldType> list) {
foreach(var row in list) {
yield return new Foo { ColumnName = /* TODO */ };
}
}
Run Code Online (Sandbox Code Playgroud)
现在IDataReader在该惰性序列之上创建一个via FastMember:
List<TheOldType> list
var data = Convert(list);
using(var bcp = new SqlBulkCopy(connection))
using(var reader = ObjectReader.Create(data, "ColumnName"))
{
bcp.DestinationTableName = "SomeTable";
bcp.WriteToServer(reader);
}
Run Code Online (Sandbox Code Playgroud)
这比填充 a 更有效DataTable- 特别是,它避免填充巨大的DataTable. 重点:以上是假脱机- 没有缓冲。
| 归档时间: |
|
| 查看次数: |
8487 次 |
| 最近记录: |