xslt преобразование выполняется долго
От: Аноним  
Дата: 03.02.10 10:22
Оценка:
имею WordML xml файлик весом 700кб
преобразовываю его в xslt — в нем основной шаблон и пару включаемых рекурсивных обрабатывающих 2-3 строчки данных
xml данные — 100 строк

делаю преобразование так


XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlData);

XmlDocument xslDoc = new XmlDocument();
xslDoc.LoadXML(xslTemplate);

XslCompiledTransform xsl = new XslCompiledTransform();
xsl.Load(xslDoc);
using (StreamWriter writer = new StreamWriter(path, false, System.Text.Encoding.UTF8))
{
  xsl.Transform(doc.CreateNavigator(), null, writer);
}


на машине с 2хядерным процессором с 3МГц и 4Гигами RAM выполняется 8-9 секунд!!!

почему так долго? есть ли способы ускорить этот процесс
Re: xslt преобразование выполняется долго
От: xzxz Ниоткуда  
Дата: 03.02.10 10:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>на машине с 2хядерным процессором с 3МГц и 4Гигами RAM выполняется 8-9 секунд!!!


А>почему так долго? есть ли способы ускорить этот процесс


Не глядя на xslt и xml?! Ну как минимум можно заранее погрузить xslt.
Re[2]: xslt преобразование выполняется долго
От: Аноним  
Дата: 03.02.10 10:40
Оценка:
X>Не глядя на xslt и xml?! Ну как минимум можно заранее погрузить xslt.

Ну как Вам привести сюда шаблон весом 700Кб?
никаких сложных выборок и сложных трагнсформаций — сплошные выборки <xsl:value-of select="@Title"/>

xml 5 простых наборов

<Table1>
<row @Title...... />
</Table1>

я имел в виду время не с начала загрузки. а с начала и до конца трансформации — время загрузки шаблона я исключил
Re[3]: xslt преобразование выполняется долго
От: Other Sam Россия  
Дата: 04.02.10 05:21
Оценка:
> X>Не глядя на xslt и xml?! Ну как минимум можно заранее погрузить xslt.
>
> Ну как Вам привести сюда шаблон весом 700Кб?
> никаких сложных выборок и сложных трагнсформаций — сплошные выборки
> <xsl:value-of select="@Title"/>
>
> xml 5 простых наборов
>
> <Table1>
> <row @Title...... />
> </Table1>
>
> я имел в виду время не с начала загрузки. а с начала и до конца
> трансформации — время загрузки шаблона я исключил

Я как-то оптимизировал один тяжеловесный xslt под xerces/xalan.
Хороших результатов добился заменяя XPath выборки из xml документа на
XPath выборки из переменных. Вот пример:
<!-- Исходные данные -->
<x>
   <Books>
     <Book>
       ...
       <Tag>fiction</Tag>
       <Tag>space</Tag>
     </Book>
     ...
   </Books>
   <Tags>
     <Tag>fiction</Tag>
     <Tag>space</Tag>
     <Tag>workbook</Tag>
     ...
   </Tags>
</x>

<!--
Исходное решение:
Для каждой Book вывести список её Tag и для каждого выведенного Tag 
указать сколько всего Book с таким Tag-ом есть в xml документе.
-->
<xsl:for-each select="Books/Book">
   <xsl:for-each select="/*/Tags/Tag[ . = current()/Tag ]">
     <xsl:value-of select="count(/*/Books/Book[Tag = current()])"/>
   </xsl:for-each>
</xsl:for-each>

<!-- Оптимизированное решение -->
<xsl:variable name="tgs" select="/*/Tags/Tag"/>
<xsl:variable name="bks" select="Books/Book"/>
<xsl:for-each select="$bks">
   <xsl:variable name="b" select="current()"/>
   <xsl:for-each select="Tag">
     <xsl:value-of select="count($bks[Tag = current()])"/>
   </xsl:for-each>
</xsl:for-each>

Такие оптимизации принесли значительное ускорение преобразования.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: xslt преобразование выполняется долго
От: Аноним  
Дата: 04.02.10 10:32
Оценка:
Спасибо большое за примеры — попробую реализовать и потом напишу что вышло

OS>Я как-то оптимизировал один тяжеловесный xslt под xerces/xalan.

OS>Хороших результатов добился заменяя XPath выборки из xml документа на
OS>XPath выборки из переменных. Вот пример:
Re[5]: xslt преобразование выполняется долго
От: Аноним  
Дата: 11.02.10 10:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Спасибо большое за примеры — попробую реализовать и потом напишу что вышло


OS>>Я как-то оптимизировал один тяжеловесный xslt под xerces/xalan.

OS>>Хороших результатов добился заменяя XPath выборки из xml документа на
OS>>XPath выборки из переменных. Вот пример:

К сожалению, применение переменных не принесло желаемого результата — по всей видимости объем документа наверно сказывается
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.