【问题标题】:Fastest Way To Populate Data From DataTable To DataSet将数据从 DataTable 填充到 DataSet 的最快方法
【发布时间】:2019-12-25 11:57:24
【问题描述】:

我正在尝试通过 foreach 循环(行和列)将数据从 DataTable 填充到 Dataset。

我看到每一轮,时间都在增长。

foreach (DataRow row in dt.Rows)
{
    stopwatch.Start();
    ds.Namespace = "http://www.schema.co";
    stdTable = new DataTable("param");

    col1 = new DataColumn("key");
    col2 = new DataColumn("value");
    stdTable.Columns.Add(col1);
    stdTable.Columns.Add(col2);
    ds.Tables.Add(stdTable);

    foreach (DataColumn col in dt.Columns)
    {
        stopwatchcolumn.Start();
        DataRow newRow;
        newRow = stdTable.NewRow();
        newRow["key"] = col.ColumnName;
        if (col.DataType == typeof(DateTime))
        {
            newRow["value"] = DateTime.Parse(row[col].ToString()).ToString("dd/MM/yyyy HH:mm:ss");
        }
        else
        {
            newRow["value"] = row[col].ToString();
        }
        stdTable.Rows.Add(newRow);
        newRow = stdTable.NewRow();
        stopwatchcolumn.Stop();
        mainLog.WrLInfo("ELAPSED COLUMNS", stopwatchcolumn.Elapsed.ToString());
    }
    stopwatch.Stop();
    mainLog.WrLInfo("ELAPSED", stopwatch.Elapsed.ToString());
    ds.AcceptChanges();
}

[已过的列] 00:00:00.0011310

2019-08-20 12:50:05 信息:

[已过的列] 00:00:00.0011394

2019-08-20 12:50:05 信息:

[已用列] 00:00:00.0011510

2019-08-20 12:50:05 信息:

[已过的列] 00:00:00.0011608

2019-08-20 12:50:05 信息:

[已过的列] 00:00:00.0011701

2019-08-20 12:50:05 信息:

[已用列] 00:00:00.0011789

2019-08-20 12:50:05 信息:

[已过的列] 00:00:00.0011910

2019-08-20 12:50:05 信息:

[已过的列] 00:00:00.0011999

2019-08-20 12:50:05 信息:

[已过的列] 00:00:00.0012306

2019-08-20 12:50:05 信息:

[已过的列] 00:00:00.0012399

2019-08-20 12:50:05 信息:

[已用列] 00:00:00.0012492

2019-08-20 12:50:05 信息:

[已过的列] 00:00:00.0012604

2019-08-20 12:50:05 信息:

[已过的列] 00:00:00.0012697

2019-08-20 12:50:05 信息:

[已过的列] 00:00:00.0012786

2019-08-20 12:50:05 信息:

[已用列] 00:00:00.0012888

2019-08-20 12:50:05 信息:

[已过的列] 00:00:00.0013158

【问题讨论】:

  • 你知道if (col.DataType == typeof(DateTime)) x = DateTime.Parse(row[col].ToString()).ToString("dd/MM/yyyy HH:mm:ss") 是多余的吗?和铸造就足够了吗?

标签: c# foreach datatable datacolumn


【解决方案1】:

你的代码测量时间是错误的,在行中

mainLog.WrLInfo("ELAPSED COLUMNS", stopwatch.Elapsed.ToString()); 

您应该使用秒表列而不是秒表,因此请更正此问题

mainLog.WrLInfo("ELAPSED COLUMNS", stopwatchcolumn.Elapsed.ToString());  

停止秒表后使用Reset方法。

【讨论】:

  • 我按时长大的问题依然存在
  • @Aleksey 你应该使用 StartNew() 而不是 Start,你没有重置你的旧度量或在 Stop 之后使用 Reset 方法
  • 嘿,谢谢改变它
【解决方案2】:

不确定为什么要为原始表格的每一行创建一个单独的表格。有很多更好的方法可以将所有数据放入一个表中。这是我将使用的代码

                foreach (DataColumn col in dt.Columns)
                {
                    if (col.DataType == typeof(DateTime))
                    {
                        stdTable.Rows.Add(new object[] { col.ColumnName, DateTime.Parse(row[col].ToString()).ToString("dd/MM/yyyy HH:mm:ss") });
                    }
                    else
                    {
                        stdTable.Rows.Add(new object[] { col.ColumnName, row[col].ToString() });
                    }
                }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2023-04-06
    • 1970-01-01
    • 2010-10-14
    • 2011-11-19
    • 1970-01-01
    相关资源
    最近更新 更多