52700.fb2 Учебник по Haskell - читать онлайн бесплатно полную версию книги . Страница 184

Учебник по Haskell - читать онлайн бесплатно полную версию книги . Страница 184

TOT

Page Flts

bytes

bytes

bytes

user

elap

user

elap

545028

150088

174632

0.00

0.00

0.00

0.00

0

0

(Gen:

1)

523264

298956

324136

0.00

0.00

0.00

0.00

0

0

(Gen:

0)

...

Итак у нас появился один существенный показатель качества программ. Это количество глубоких очи-

сток. Во время глубокой очистки вычислитель производит две затратные операции: сканирование всей кучи

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

число можно удачной комбинацией показателей A и H. Но не стоит сразу начинать обновлять параметры по

умолчанию, если ваша программа работает слишком медленно. Лучше сначала попробовать изменить ал-

горитм. Найти функцию, которая слишком много ленится и ограничить её с помощью seq или энергичных

образцов. В этом примере у нас была всего одна функция, поэтому поиск не составил труда. Но что если их

уже очень много? Скорее всего так и будет. Не стоит оптимизировать не рабочую программу. А в рабочей

программе обычно много функций. Но это не так страшно, помимо суммарных показателей GHC позволяет

собирать более конкретную статистику.

Стоит отметить функцию performGC из модуля System.Mem, она форсирует поверхностную сборку мусора.

Допустим вы чистаете какие-то данные из файла и тут же преобразуете их в структуру данных. После того

как чтение данных закончится, вы знаете, что промежуточные данные связаные с чтением вам уже не нужны.

Выполнив performGC вы можете подсказать об этом вычислителю.

Профилирование функций

Время и общий объём памяти

Процесс отслеживания показателей память/скорость называется профилированием программы. Всё вро-

де бы работает, но работает слишком медленно, необходимо установить причину. Рассмотрим такую про-