0

我正在研究一个解决方案,我有一个非常耗时的方法(GetArbeitsplaene),我不知道加速它。我的数据有一个 SQL 2008 R2 Express Edition 数据库。在一张表中,我有 100.000 个条目。这是我的代码:

/// <summary>
/// Gets the arbeitsplaene.
/// </summary>
private void GetArbeitsplaene()
{
    DataColumn col = new DataColumn("Arbeitsplan", typeof(List<Arbeitsplan>));
    dTable.Columns.Add(col);

    for (int i = 0; i < dTable.Rows.Count; i++)
    {
        DataRow row = dTable.Rows[i];
        string materialnummer = Convert.ToString(row[1]);

        if (arbeitsplaeneTable == null)
        {
            SQLHelperClass.CreateTable(cn, "ARBEITSPLAENE", ref arbeitsplaeneTable);
        }

        DataRow[] select = arbeitsplaeneTable.Select("Material Like '" + materialnummer + "'");
        List<Arbeitsplan> list = Converter.ConvertDataRowToArbeitsplaene(select);

        dTable.Rows[i].SetField("Arbeitsplan", list);
    }

    // very important, otherwise the changes of the images will be tracked.
    dTable.AcceptChanges();
}

/// <summary>
/// Converts the data row to arbeitsplaene.
/// </summary>
/// <param name="select">The select.</param>
/// <returns></returns>
public static List<Arbeitsplan> ConvertDataRowToArbeitsplaene(DataRow[] select)
{
    List<Arbeitsplan> list = new List<Arbeitsplan>();

    for (int i = 0; i < select.Count(); i++)
    {
        Arbeitsplan plan = new Arbeitsplan();
        DataRow row = select[i];
        plan.Material = Convert.ToString(row[0]);
        plan.Vrg = Convert.ToString(row[1]);
        plan.Steu = Convert.ToString(row[2]);
        plan.Kurztext_Vorgang = Convert.ToString(row[3]);
        plan.Arbeitsplatz = Convert.ToString(row[4]);
        plan.LstArt = Convert.ToString(row[5]);
        plan.Kostenstelle = Convert.ToString(row[6]);
        list.Add(plan);
    }

    return list;
}

    /// <summary>
    /// Creates the table.
    /// </summary>
    /// <param name="tableName">Name of the table.</param>
    /// <param name="table">The table.</param>
    public static void CreateTable(SqlConnection cn, string tableName, ref DataTable table)
    {
        string sql = "select * from " + tableName;
        SqlCommand cmd = new SqlCommand(sql, cn);
        SqlDataAdapter tempAdapter = new SqlDataAdapter(cmd);
        SqlCommandBuilder tempcb = new SqlCommandBuilder();
        tempcb.ConflictOption = ConflictOption.OverwriteChanges;
        tempcb.DataAdapter = tempAdapter;
        table = new DataTable();
        tempAdapter.Fill(table);
    }

所以我需要运行 for 循环 100.000 次,这需要时间。如何改进我的代码以更快?

谢谢,特罗

4

0 回答 0