Путь к профилю IxSet?
Я продолжаю развивать свою программу, используя IxSet
и мне любопытно, если я делаю что-то не так (или это можно оптимизировать). В настоящее время он потребляет слишком много памяти, чем я считаю.
Программа здесь: https://bitbucket.org/k_bx/duplicates Результат профилирования здесь: https://gist.github.com/4602235
ps: пожалуйста, кто-нибудь добавил тег "ixset", так как я не могу его создать.
ОБНОВИТЬ:
Профилирование памяти с помощью -h: http://img-fotki.yandex.ru/get/6442/72443267.2/0_9d04d_4be1cd9f_orig
ОБНОВЛЕНИЕ 2:
Чистое представление профилирования памяти для того же файла -h: http://heap.ezyang.com/view/c1781ec5e53b00d30a9f8cd02f0b8a5e777674c9
1 ответ
Вы просто используете ванильное профилирование кучи, которое не обязательно фиксирует использование структуры данных. Как вы указали, он разбивает кучу на функции из вашего кода. Есть несколько вариантов, которые вы можете передать профилировщику, чтобы получить то, что вы хотите (из руководства ghc: http://www.haskell.org/ghc/docs/latest/html/users_guide/prof-heap.html)
-hc (можно сократить до -h). Разбивает график по центру затрат, который создал данные.
-hm Разбить динамическую кучу с помощью модуля, содержащего код, который произвел данные.
-hd Разбивает график по описанию закрытия. Для реальных данных описание - это просто имя конструктора, для других замыканий - строка, генерируемая компилятором, идентифицирующая замыкание.
-hy Разбивает график по типу. Для замыканий, которые имеют тип функции или неизвестный / полиморфный тип, строка будет представлять приближение к фактическому типу.
-hr Разбить график по фиксированному набору.
-hb Разбить график по биографии. Биографическое профилирование описано более подробно ниже
hm, hd и hr, вероятно, будут наиболее полезны для вас. Вы также можете, немного подумав, получить некоторую информацию о свойствах строгости с помощью hb.