使用数据表搜索的慢代码

时间:2012-01-01 19:16:33

标签: c# xml performance ado.net

我有2个数据表(1个来自xml,其他来自数据库),我试图比较。表与复合主键相关。我正在尝试执行以下代码。大约5000行需要超过一分钟。

我尝试使用datatable.Select()用于相同的bt没有用。有人可以建议如何优化代码以及我在这里缺少什么?

    DataSet ds = new DataSet();

    DataTable dtXmlRecs = new DataTable("records");

    dtXmlRecs.Columns.Add(new DataColumn("A", typeof(int)));
    dtXmlRecs.Columns.Add(new DataColumn("B", typeof(string))); 
    dtXmlRecs.Columns.Add(new DataColumn("C", typeof(int)));
    dtXmlRecs.Columns.Add(new DataColumn("D", typeof(int)));
    dtXmlRecs.Columns.Add(new DataColumn("E", typeof(string)));
    dtXmlRecs.Columns.Add(new DataColumn("F", typeof(Int16)));
    dtXmlRecs.Columns.Add(new DataColumn("H", typeof(byte))); 
    dtXmlRecs.Columns.Add(new DataColumn("I", typeof(decimal))); 
    dtXmlRecs.Columns.Add(new DataColumn("J", typeof(decimal))); 
    dtXmlRecs.Columns.Add(new DataColumn("K", typeof(decimal))); 


    dtXmlRecs.PrimaryKey = new DataColumn[] { 
              dtXmlRecs.Columns["E"]
            , dtXmlRecs.Columns["F"]
            , dtXmlRecs.Columns["H"] };


    ds.Tables.Add(dtXmlRecs);

    ds.ReadXml(@"c:\myxmlfile.xml");

    DataTable dtOldData = objBAL.getOldData(
                     ds.Tables["records"].Rows[0]["B"].ToString());

    dtOldData.PrimaryKey = new DataColumn[] 
                 { dtOldData.Columns["E"]
                 , dtOldData.Columns["F"]
                 , dtOldData.Columns["H"] };
    ds.Tables.Add(dtOldData);

    ds.Relations.Add(new DataRelation("OldNewData", 
                     new DataColumn[] 
                     { dtOldData.Columns["E"]
                     , dtOldData.Columns["F"]
                     , dtOldData.Columns["H"] }, 
           new DataColumn[]
                     { dtXmlRecs.Columns["E"]
                     , dtXmlRecs.Columns["F"]
                     , dtXmlRecs.Columns["H"]}
                     , false));
    DataRow drXml;
    DataRow drCircle;
    decimal diff;
    for (int i = 0; i < dtXmlRecs.Rows.Count; i++)
    {
        drXml = dtXmlRecs.Rows[i];
        //this function call is very slow.
        drCircle = drXml.GetParentRow("OldNewData"); 

        if (drCircle != null)

        {

    //code goes here

        }
   }

谢谢..

0 个答案:

没有答案