Почему саксон изначально медленно, но потом быстро в моих тестах xpath?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему саксон изначально медленно, но потом быстро в моих тестах xpath?

Сообщение Anonymous »

Я сравниваю саксон для некоторых выражений XPath в Groovy/Java. Я измеряю время выполнения путем воссоздания процессора , documentbuilder и xpathcompiler каждый раз, надеясь получить согласованные «холодные». -none PrettyPrint-Override ">

Код: Выделить всё

static def measureSaxon(String xml, String xpath) {
Processor processor = new Processor(false);
processor.setConfigurationProperty(FeatureKeys.OPTIMIZATION_LEVEL, "0")
XdmNode xdm = processor.newDocumentBuilder().build(new StreamSource(new StringReader(xml)));
def compiler = processor.newXPathCompiler()
return measureExecutionTime(
"Saxon",
xpath,
{
def evaluate = compiler.evaluate(xpath, xdm)
if (evaluate instanceof XdmValue && evaluate.size() > 0) {
return evaluate.itemAt(0).getStringValue()
} else {
return "No node found"
}
}
)
}
< /code>
Тем не менее, первый вызов всегда намного медленнее, чем последующие вызовы, которые, по -видимому, извлекают выгоду из какого -либо кэширования или оптимизации, даже хотя я пробовал: < /p>
processor.setConfigurationProperty(FeatureKeys.OPTIMIZATION_LEVEL, "0")
< /code>
Ниже приведены мои контрольные результаты. Вы можете увидеть, как первый вызов может быть очень медленным, а последующие вызовы намного быстрее: < /p>
# Benchmark Results for Saxon

| XPath Expression                | Execution Time (ns) | Execution Time (ms) | Result               |
|---------------------------------|---------------------|---------------------|----------------------|
| `/program/@name`                | 151562270           | 151.56227           | j$Collections        |
| `/program/objects/o/@base`      | 522288              | 0.522288            | some.class           |
| `/program/objects/o/o/o/o/@base`| 12328695            | 12.328695           | org.lang.bytes       |
Есть ли более глубокий механизм кэширования или внутренняя оптимизация в самом саксоне, который не может быть отключен, просто сбросив процессор или настройку оптимизации_level на ноль? Как я могу заставить саксона всегда работать так, как будто он находится на «первом» вызове, чтобы измерить действительно холодную производительность? быть большой помощью. Спасибо!


Подробнее здесь: https://stackoverflow.com/questions/793 ... benchmarks
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»