Проверка выделения памяти в Инструментах

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

preparebar() {
# $1 - bar length
# $2 - bar char
    barlen=$1
    barspaces=$(printf "%*s" "$1")
    barchars=$(printf "%*s" "$1" | tr ' ' "$2")
}

и одна для отображения индикатора выполнения:

progressbar() {
# $1 - number (-1 for clearing the bar)
# $2 - max number
    if [ $1 -eq -1 ]; then
        printf "\r  $barspaces\r"
    else
        barch=$(($1*barlen/$2))
        barsp=$((barlen-barch))
        printf "\r[%.${barch}s%.${barsp}s]\r" "$barchars" "$barspaces"
    fi
}

Его можно использовать как:

preparebar 50 "#"

, что означает подготовку строк для строки с 50 символами "#", и после этого:

progressbar 35 80

отобразит количество символов "#", соответствующее соотношению 35/80 :

[#####################                             ]

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

progressbar -1 80

Более медленная версия все в одной функции:

progressbar() {
# $1 - number
# $2 - max number
# $3 - number of '#' characters
    if [ $1 -eq -1 ]; then
        printf "\r  %*s\r" "$3"
    else
        i=$(($1*$3/$2))
        j=$(($3-i))
        printf "\r[%*s" "$i" | tr ' ' '#'
        printf "%*s]\r" "$j"
    fi
}

и ее можно использовать как ( тот же пример, что и выше):

progressbar 35 80 50

Если вам нужен прогрессбар на stderr, просто добавьте >&2 в конце каждой команды printf.

14
задан mac_55 30 June 2009 в 00:35
поделиться

1 ответ

Инструмент ObjectAlloc предназначен для графического отображения общего распределения объектов с течением времени и не принимает во внимание освобождение. По сути: он всегда будет расти .

Что вы можете сделать, так это посмотреть на столбцы Net Bytes и # Net. Эти столбцы будут корректироваться в зависимости от количества объектов, которые вы освобождаете, и если вас беспокоит общее распределение объектов, вы можете использовать их для измерения производительности вашей программы.

Вы можете взглянуть на ] эта ветка на форумах службы поддержки Apple - в ней больше говорится о том, какие инструменты измеряют и как вы можете протестировать свое приложение.

24
ответ дан 1 December 2019 в 09:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: