У меня есть следующий код:
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,8 гигабайта в XMLReader.
Есть ли способ избежать необходимости заново объявлять XMLReader каждый раз, тем самым уменьшая накладные расходы, с которыми я сталкиваюсь?