我正在使用IxSet
继续开发我的程序,如果我做错了(或者可以优化),我很好奇。目前它消耗的内存比我认为的要多得多。
计划在这里:https://bitbucket.org/k_bx/duplicates 分析结果如下:https://gist.github.com/4602235
p.s:请,有人添加“ixset”标签,因为我无法创建一个。
更新:
使用-h:http://img-fotki.yandex.ru/get/6442/72443267.2/0_9d04d_4be1cd9f_orig
进行内存分析更新2:
同一个-h文件的整洁内存分析视图:http://heap.ezyang.com/view/c1781ec5e53b00d30a9f8cd02f0b8a5e777674c9#form
答案 0 :(得分:1)
您只是使用vanilla堆分析,它不一定捕获数据结构使用情况。正如您所指出的,它会通过代码中的函数来分解堆。有几个选项可以通过探查器来获得你想要的东西(来自ghc指南:http://www.haskell.org/ghc/docs/latest/html/users_guide/prof-heap.html#rts-options-heap-prof)
-hc(可以缩短为-h)。通过产生数据的成本中心堆栈来分解图表。
-hm通过包含产生数据的代码的模块来分解实时堆。
-hd通过闭包描述细分图形。对于实际数据,描述只是构造函数名称,对于其他闭包,它是一个 编译器生成的字符串,用于标识闭包。
-hy按类型细分图表。对于具有函数类型或未知/多态类型的闭包,该字符串将表示一个 近似于实际类型。
-hr按固定器设置细分图形。
-hb通过传记分解图表。传记剖析在下面有更详细的描述
hm,hd和hr可能对您最有用。经过一些思考,您还可以使用hb获取有关严格属性的一些信息。