用C#手动填充DataTable的最快方法

用户名

我想知道你们中是否有人知道一种手动填充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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何手动填充?

来自分类Dev

C在手动填充的数组中搜索值

来自分类Dev

C在手动填充的数组中搜索值

来自分类Dev

手动安装我的单词加载项VSTO(功能区)?用C#构建

来自分类Dev

手动安装我的单词加载项VSTO(功能区)?用C#构建

来自分类Dev

如何在C#中手动使用PKCS5(RFC 1423)填充进行AES解密?

来自分类Dev

手动填充数组

来自分类Dev

锂电:如何手动填充DocumentSet?

来自分类Dev

手动填充包含集合的模型

来自分类Dev

在C#中手动拆分字符串

来自分类Dev

C#客户端上的RabbitMQ手动ACK

来自分类Dev

在C#中手动控制内存分配

来自分类Dev

在C#中手动设置线程退出代码?

来自分类Dev

C#,如何手动设置光标位置

来自分类Dev

用JSON数据填充成员后,将其手动添加到通用列表

来自分类Dev

手动阻止异步方法

来自分类Dev

手动设置Fedora的安装方法

来自分类Dev

C#-手动覆盖配置

来自分类Dev

过去的手动优化(C语言)

来自分类Dev

手动遍历c中的数组

来自分类Dev

手动设置JQuery DataTable列宽

来自分类Dev

如何手动打开/显示Alloy Datatable的CellEditor?

来自分类Dev

如何用对象手动填充数组?

来自分类Dev

序列类型的外键-确保始终手动填充

来自分类Dev

Flutter从手动包含的数据库填充列表

来自分类Dev

如何手动实现pytorch卷积的填充

来自分类Dev

手动填充顶点结构以实现主权

来自分类Dev

用Ember.js进行手动表单数据保存的正确方法是什么?

来自分类Dev

锂已弃用的__init()方法,需要手动调用