我想知道你们中是否有人知道一种手动填充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方法填充数据表的问题),所以我决定发布我的问题。
任何输入都非常感谢!
我将此数据表添加到sql服务器数据库中(我通过SqlBulkCopy执行此操作)
这是个错误; 这DataTable
是纯开销。您应该公开的是IDataReader
该数据。这个API有点棘手,但是FastMember使它更容易。例如,听起来您有1列;因此请考虑:
class Foo {
public string ColumnName {get;set;}
}
现在编写一个迭代器块方法,将其从每个项目的原始列表转换为该方法:
IEnumerable<Foo> Convert(List<TheOldType> list) {
foreach(var row in list) {
yield return new Foo { ColumnName = /* TODO */ };
}
}
现在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);
}
这比填充a更好DataTable
,特别是避免填充很大的DataTable
。重点:以上是假脱机-未缓冲。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句