We rise up for the things we believe in over and over again

... но, как оказалось, очень быстрая. Настолько, что придется к ней привыкнуть, несмотря на вырвиглазный синтаксис. Берем простой код, где в памяти крутится XML-файл на два с половинкой мегабайта (нужно выбрать одну единственную ноду), оформляем его дважды, используя разные подходы, и обрамляем это дело в командлет measure-command {}, который и покажет разницу. Код вот такой:


Разница - больше, чем сто раз в пользу XPath. 9 мс против 1202 мс. СТО РАЗ, КАРЛ!!!

За подобное увеличение скорости работы я готов простить даже то убожество, в каком приходится записывать регистронезависимый поиск в атрибутах ноды. Да-да, я вот про это самое contains бла-бла-бла. А все потому, что Select-XML регистрозависим целиком и полностью. Как в области структуры XML, которую указываем в XPath (имена нод/атрибутов), так и в области значений атрибутов.

Короче, грядет перепись пары-тройки модулей...

@музыка: Dance with the Dead - Skeletons in the Attic

@темы: PowerShell

Комментарии
23.06.2018 в 10:04

Frozen flame
А почему //Root/Children/, а не /Root/Children/? Root на самом деле не корень? :hmm:
23.06.2018 в 10:06

We rise up for the things we believe in over and over again
Tenno Seremel, потому что пагубная привычка, да :)
23.06.2018 в 14:03

Hikedaya, а он точно фактически получает данные за это время? Там нет каких-нибудь ленивых вычислений?

Однажды я копался в недрах нашего основного древнего проекта и внезапно обнаружил, что в одном из мест, где надо было отсортировать большой массив, использовался... метод пузырька.

Сначала я фалломорфировал, а потом заменил пузырёк на qsort. Это дало прирост производительности по операции более чем в 10 раз. Операция была достаточно частая и раньше выполнялась несколько секунд.
23.06.2018 в 14:57

We rise up for the things we believe in over and over again
zHz00, как мне объяснил более сведущий коллега  Cybeon, where-object {} (в скрипте - его сокращенная запись where {}) - это цикл, который прогоняется по всей коллекции, которую ему на вход дали. Именно эта операция и вызывала просто жуткие тормоза. И именно от нее (хотя она мне так нравится своей неприхотливостью) пришлось отказаться в пользу более монструозного, но и более скоростного XPath. Разница налицо - боевой скрипт прогонял полторы тысячи записей несколько часов(sic!), обновленная версия справилась за минуту, причем с дополнительной реиндексацией записей во всей той XMLке..

Кстати, наслышан, что пузырьковый метод - чуть ли не базовое задание для соискателей на позицию программиста. К своему стыду, я эту задачу не могу реализовать до сих пор, даже алгоритм не составлю, потому что не знаю, как она работает. Как ни парадоксально - я не программер :)
23.06.2018 в 15:57

Frozen flame
Hikedaya, двойной цикл по коллекции со сравнением элементов на каждом шаге: https://ru.wikipedia.org/wiki/Сортировка_пузырьком
23.06.2018 в 16:27

Hikedaya, готов поверить, что пузырёк -- это базовое задание. Потому что если не можешь объяснить про пузырёк -- дело швах. Проблема только в том, что в реальных условиях пузырёк хорошо работает только для очень маленьких массивов (до 10 элементов), а при таких объёмах всё равно, каким алгоритмом сортировать. То есть, такое задание -- бессмысленное. Надо по идее спрашивать о том, с чем реально соискателю предстоит работать. Но с другой стороны, проверять соискателя надо начинать с базовых вещей. И для этих целей алгоритм подходит.

Пузырёк нужен, чтобы вообще объяснить, что такое сортировка и как она работает. Я студентам объяснял. Правда qsort потом тоже рассказал. Обидно мне за него было.
23.06.2018 в 16:40

Frozen flame
zHz00, (страшная тайна) я, например, по памяти кроме пузырька ничего не помню, хотя мне и объясняли ещё в школе. Просто потому что ни разу не пригодилось, т.к. можно (и нужно) использовать готовые средства, которые в языке уже есть. Как Шерлок Холмс, которому круглость Земли, кажется, никогда не пригождалась XD Естественно, если мне будет надо, я перечитаю и реализую.
23.06.2018 в 17:02

We rise up for the things we believe in over and over again
Tenno Seremel, спасибо, почитаю )
zHz00, базис нужен всегда, это верно. Помню, в школе на УПК нас гоняли за то, что мы хотели сразу садиться и что-то там "писать", не изучая теоретический материал. Кто-то осознал гибельность такого подхода, кто-то нет. Принадлежавшим ко второй группе в конце не повезло )
24.06.2018 в 20:53

Тотальная неудачница и убийца жёстких дисков.
Группа анонимных сортировщиков. Я лично не знаю пузырька кроме того, что в том ролике, где сортировка озвучивалась, он действительно булькал. Помню только тот метод, где последовательно переставляются элементы местами в правильном порядке. Вроде бы он же – insertion sort OO

Hikedaya

Люблю рассказывать про школьную олимпиаду по информатике. Были в классе Yamaha MSX2 и новые 166 (или 133?) машины под Windows 95. Программы писали на MSX2, а под виндой всякие офисы изучали, хотя народ был в курсе, что в комплекте есть QBasic. А на олимпиаде разрешили выбрать машину из двух наборов, ну почти все и ломанулись на новые. Итог немного предсказуем: почти все на новых машинах завалили задания, потратив время на то, чтобы разобраться в отличиях MSX Basic от QBasic.

/* Нечто подобное происходит в индустрии и сейчас, правда страдает, как правило, не устремлённый в будущее погромист, а пользователь. */