leo_sosnine: (Default)
[personal profile] leo_sosnine
Недавно Мелкомягкие праздновали десятилетие повершелла, щас ему 13 лет.

Простая задача, которую и администраторам и не очень нужно периодически делать за тем или иным резоном это померять размер кого-нибудь говна на диске. Например, папочки "уиндоуз".

Сравним резульдады повершелла столкнутого низким лбом идиота с масадосовским мамонтом ровосору (которую виндоадмины вынуждены были гонять, т.к. штатного средства померить толщину директории в системе не предусмотрено, а суммировать скриптом субоптимально) в плане скорости замера (что критично для работы с большими файл-серверами, где замеры даже быстрыми способами занимают часы):



Так называемый "ГУИ" меряет ещё тормознее, мой замер оказался, ахтунг, 60 зекунден, дамен унд херрен, 60 зекунден!

Размер папрочки "уиндоуз", кстати, ахтунговые 87 ГБ. Для перспективы, экспишка, которая делала почти всио то же самое, весила порядка 100-200 МБ, в зависимости от уровня апдейтов.

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

Вперёд, Индия! Даёшь стагнацию и смерть западной цивилизации!

Date: 2019-09-27 09:29 pm (UTC)
scif_yar: (Default)
From: [personal profile] scif_yar
Теперь к предмету срача
Measure-Command {Get-ChildItem c:\windows -Recurse -Force -ErrorAction SilentlyContinue| Measure-Object -Property Length -sum}
50 секунд

Measure-Command {
$a = Get-ChildItem c:\windows -Recurse -Force -ErrorAction SilentlyContinue
}
53 секунды
$sum = 0

Measure-Command {
foreach ($w123 in $a) {
$sum = $sum + $w123.length
}

}

300 секунд


А теперь внимание вопрос: если пош честно перебирает каждый обьект, то куда лезет за инфой робокопи для такого подсчета?

Date: 2019-09-30 05:40 am (UTC)
elglin: (Default)
From: [personal profile] elglin
Я подозреваю, что туда же лезет. Разница в том, что robocopy, скорее всего, написан на плюсах и дергает родные Win32API (окей, Win64API), а вот интерпретатор поша, с вероятностью, написан на C#, поэтому живет в виртуальной машине .NET и так далее и тому подобное. Короче, опять Python vs C++.
Ты сам сказал, что пош собирает все это в объекты с кучей ненужных свойств, а у robocopy внутри, если писали годные алгоритмисты, может быть куча внутренних однопроходных оптимизаций. Да и std::vector или что там под капотом побыстрее будет.
Кроме того, robocopy может паковать вызовы к API пачками, чего тривиальный алгоритм делать не будет - а на этом тоже можно неплохо наиграть.

Date: 2019-09-30 06:44 pm (UTC)
scif_yar: (Default)
From: [personal profile] scif_yar
Ну можно взять process explorer и посмотреть.
Page generated Jul. 25th, 2025 03:38 am
Powered by Dreamwidth Studios