истинное время выполнения
blockquote>Нет такой вещи, как «истинное время выполнения». Если вам нужно решить эту задачу только один раз, истинным временем выполнения будет время первого теста (вместе со временем для запуска самой JVM). В общем, время, затрачиваемое на выполнение данной части кода, зависит от многих вещей:
- Является ли этот фрагмент кода интерпретированным JIT-компилятором C1 или C2. Обратите внимание, что существует не только три варианта. Если вы вызываете один метод из другого, один из них может быть интерпретирован, а другой может быть скомпилирован C2.
- Для компилятора C2: как этот код был выполнен ранее, так что в профиле ветви и типа.
- Состояние сборщика мусора: прерывает ли это выполнение или нет
- Очередь компиляции: компилятор JIT компилирует другой код одновременно (что может замедлить работу вниз по исполнению текущего кода)
- Схема памяти: как объекты расположены в памяти, сколько строк кеша должно быть загружено для доступа ко всем необходимым данным.
- Состояние предсказания ветвления CPU который зависит от предыдущего исполнения кода и может увеличивать или уменьшать количество ошибочных предсказаний филиала.
И так далее и т. д. Поэтому, даже если вы измеряете что-то в изолированном контролере, это не означает, что скорость одного и того же кода в процессе производства будет одинаковой. Он может отличаться по порядку величины. Поэтому перед тем, как измерить что-то, вы должны спросить себя, почему вы хотите измерить эту вещь. Обычно вам все равно, как долго выполняется какая-то часть вашей программы. Обычно вам нравится латентность и пропускная способность всей программы. Так что профилируйте всю программу и оптимизируйте самые медленные части. Вероятно, вещь, которую вы измеряете, не самая медленная.
Я думаю, что вы хотите получить имя самого внешнего элемента XML. Это можно сделать, как в следующем примере XSL:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="outermostElementName" select="name(/*)" />
<xsl:template match="/">
<xsl:value-of select="$outermostElementName"/>
</xsl:template>
</xsl:stylesheet>
Обратите внимание, что существует небольшая разница в терминологии XPath:
.Верх дерева является корневым узлом. (Терминология 1.0) или узел документа (2.0). Это то, что относится к «/». Это не элемент: это родитель самого внешнего элемента (и любые комментарии и инструкции обработки, которые предшествуют или следуют за самым внешним элементом). Корневой узел не имеет имени.
Используйте функцию XPath name()
.
Одно выражение XPath для получения названия вершины (не корень!) элемент:
name(/*)
имя () функция возвращает полностью определенное название узла, таким образом, для элемента <bar:foo/>
строка "bar:foo" будет возвращена.
В случае, если только локальная часть имени требуется (никакой префикс и ":"), тогда функция XPath local-name()
должна использоваться.
Разобрался. Имя функции () с параметром * вернет foo.