Мне нравится думать, что моя проблема не очень уникальна, поскольку размер моего XML-файла составляет всего 3 МБ.В XML около 60 тысяч записей.Я с трудом сокращаю время обработки.В настоящее время чтение и вставка в Datatables занимает около 7-8 минут.(Обратите внимание, что я НЕ вставляю в базу данных, поэтому транзакции с базой данных здесь не являются проблемой)
Вот код, который я написал.Будем очень благодарны за любые предложения по сокращению времени обработки.
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;
}
}
Тогда у меня есть следующая функция для получения значения в DataTable.Элемент «Записи» занимает 90% времени, поэтому я публикую этот код, остальные функции аналогичны.
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;
}