I like to think that my problem is not very unique, given size of my XML file is just 3MB. There are close to 60 thousand records in XML. I am having hard time reducing the processing the processing time. Currently it is taking close to 7-8 minutes to read and insert into Datatables. (Please note I am NOT inserting in database yet, so database transactions are not the issues here)
Here is the code I wrote. Any suggestion to reduce the processing time will be greatly appreciated.
XmlTextReader reader = new XmlTextReader(destFile);
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
if (reader.Name == "Report")
{
FileDataTable = UpdateReportTable(FileDataTable, reader);
else if (reader.Name == "Name")
{
NameTable = UpdateNameTable(NameTable, reader);
}
else if (reader.Name == "Entries")
{
EntriesTable = UpdateEntriesTable(EntriesTable , reader);
}
reader.MoveToElement();
break;
case XmlNodeType.Text:
break;
case XmlNodeType.EndElement:
break;
}
}
Then I have following function to get value into DataTable. Element "Entries" are taking 90% of the time so I am posting that code, other functions are similar.
private static DataTable UpdateEntriesTable(DataTable entries, XmlTextReader reader)
{
DataRow row = entries.NewRow();
for (int attInd = 0; attInd < reader.AttributeCount; attInd++)
{
reader.MoveToAttribute(attInd);
if (reader.Name == "refDataId") { row["DataId"] = Convert.ToInt32(reader.Value); }
}
reader.MoveToElement();
reader.Read();
row["DataCount"] = Convert.ToInt32(reader.Value);
row["LastModifiedOn"] = DateTime.Now;
try
{
entries.Rows.Add(row);
entries.AcceptChanges();
}
catch (Exception ex)
{
log.Error(ex.Message);
return entries;
}
return entries;
}