У меня есть 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
}
}
Спасибо ..