Я очень плохо знаком с XSLT, и первое, что мне нужно сделать, - это проанализировать файл размером 300 МБ (и это на небольшом конце). На данный момент XSLT не так сложен, он просто удаляет некоторые узлы, которые соответствуют определенным критериям.
У меня две проблемы:
- Это слишком медленно. Обработка 500 000 записей занимает 50 секунд, но этого недостаточно.
- Он потребляет 500 МБ памяти, так что это будет только хуже, когда файлы станут больше.
Есть ли что-нибудь, что я могу сделать в .net, чтобы заставить работать лучше?
Я знаю, что могу изучить синтаксический анализ на основе SAX или STX (который упоминается в другой публикации ), но я бы предпочел остаться в пределах границ .net
Спасибо!
EDIT:
Вот мой XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:test="http://schemas....">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="test:QueryRow[test:Columns/test:QueryColumn[test:Name='hit_count' and test:Value>200]]"/>
</xsl:stylesheet>
Вот код, который я использую для преобразования
XslCompiledTransform compiledTransform = new XslCompiledTransform();
XsltSettings settings = new XsltSettings();
settings.EnableScript = true;
XmlReader xmlReader = XmlReader.Create("in.xml");
XmlWriter xmlWriter = XmlWriter.Create("out.xml");
compiledTransform.Load("format.xslt", settings, null);
compiledTransform.Transform(xmlReader, xmlWriter); //this is what takes a long time
В данный момент я пытаюсь просто прочитать файл и записать его обратно, но кажется, что он фактически читает весь файл в память, поэтому я пытаюсь найти способ читать его построчно.