У меня есть следующий код:Более эффективное использование XMLReader
for (i = 1; i <= loopsNeeded; i++)
{
lblCurrent.Text = string.Format("{0} of {1}", i, loopsNeeded);
prgWriteProgress.Value = i;
this.Refresh();
reader = XmlReader.Create(FilePath);
outputFile = CreateXmlOutputFileName(xmlFileInfo);
FileStream stream = new FileStream(outputFile, FileMode.Create);
xslArg = new XsltArgumentList();
xslArg.AddParam("Index", "", currentNode);
xslArg.AddParam("BatchSize", "", batchSize);
transformation.Transform(reader, xslArg, stream);
currentNode+=batchSize;
stream.Flush();
stream.Close();
}
Этот код выполняется с помощью файла XML собирание из определенной партии информации каждый раз, и она постепенно перемещается через файл.
Согласно MSDN:
XmlReader обеспечивает однонаправленный, доступ только для чтения к потоку данных XML.
Это дает мне возможность переформулировать XML-считыватель для каждого цикла, чтобы убедиться, что он начинается в верхней части файла.
Испытание дало следующие отзывы:
125,000 information nodes/125,000 per batch file = 48 mins.
125,000 information nodes/5000 per batch file = 58 mins.
125,000 information nodes/500 per batch file = 2 hours 33 mins.
Как вы можете видеть, что есть тяжелый отзвук при выполнении небольших размеров партий в связи с требованием, чтобы постоянно перезарядить файл 0.8gig в XMLReader.
Есть ли способ избежать необходимости каждый раз обновлять XMLReader, тем самым уменьшая накладные расходы, с которыми я сталкиваюсь?
И затем вы можете создать читатель из документа, чтобы сделать преобразование. –
Посмотрите на это сейчас и вернитесь к вам. – Mike
+1: удалил мой дубликат ответа. – IAbstract