gpt4 book ai didi

c# - 在 C# 中手动填充 DataTable 的最快方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:51:13 24 4
gpt4 key购买 nike

我想知道你们中是否有人知道比我知道的更快的手动填充 DataTable 的方法。

这是我得到的,我有一个包含大约 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];
}

因为我在论坛上没有发现任何类似的问题(只是关于如何通过 sql 和 fill 方法填充数据表的问题),所以我决定发布我的问题。

非常感谢任何输入!

最佳答案

i add this DataTable into an sql server database (i do this by SqlBulkCopy)

这是一个错误; DataTable 在这里是纯粹的开销。您应该公开的是对该数据的 IDataReader。这个 API 有点棘手,但是 FastMember使它更容易。例如,听起来您有 1 列;所以考虑:

class Foo {
public string ColumnName {get;set;}
}

现在编写一个迭代器 block 方法,将其从每个项目的原始列表中转换为:

IEnumerable<Foo> Convert(List<TheOldType> list) {
foreach(var row in list) {
yield return new Foo { ColumnName = /* TODO */ };
}
}

现在通过 FastMember 在惰性序列之上创建一个 IDataReader:

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);
}

这比填充 DataTable 要好得多 - 特别是,它避免了填充巨大的 DataTable。强调:以上是假脱机 - 没有缓冲。

关于c# - 在 C# 中手动填充 DataTable 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25038604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com