Медленный код с использованием поиска в таблице данных - PullRequest
1 голос
/ 01 января 2012

У меня есть 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

        }
   }

Спасибо ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...