【发布时间】:2011-12-19 14:22:18
【问题描述】:
谁能推荐一个具有良好 F# 支持的性能分析工具?
我一直在使用 Visual Studio 2010 分析器,但在使用 F# 时发现了一些问题。感觉更像是我在分析反射后的字节码,而不是原来的 F#。
例如,在分析以下稍微做作的示例时:
let Add a b =
a + b
let Add1 = Add 1
let rec MultiAdd count =
match count with
| 1 -> 1
| _ -> (Add1 1) + (MultiAdd (count - 1))
MultiAdd 10000 |> ignore
我得到以下调用树:
当我在函数详细信息中查看 Microsoft.FSharp.Core.FSharpFunc`2.Invoke(0) 时,我看到:
我知道我所看到的是基于编译代码的底层实现,虽然我可以遵循它,但很难做到。
有没有人有使用 F# 的其他分析工具的经验,他们在映射到原始 F# 代码方面做得更好吗?
【问题讨论】:
-
您是否尝试过 CPU 采样选项而不是函数调用的检测?
-
我最近没有看过这个,所以我不能说现在最好的选择是什么,但当时我使用 dotTrace 并且刚刚习惯使用生成的反编译代码 dotTrace。跟踪所有的 '.Invoke()' 调用实际上对于诊断性能问题非常有用,因为它向您展示了幕后真正发生的事情。一般来说,反编译的代码越复杂,运行速度就越慢。
标签: performance f# profiling