F#交互式和性能分析器

时间:2010-07-12 07:19:33

标签: f# profiler f#-interactive

F#Interactive(以及一般的REPL风格工具)是性能分析的理想入口。有什么比选择代码块并将其直接发送到将返回性能分析报告的分析器更容易的事情。不幸的是,现有的分析器看起来没有REPL支持:您必须将分析器附加到进程或指定可执行文件或Web应用程序进行分析。

我最终要做的是将代码块包装到单元测试中的配置文件,然后针对NUnit命令行会话执行配置文件。但这是我们现在用F#做的最好的事情吗?

3 个答案:

答案 0 :(得分:9)

问题是什么?

你知道#time命令吗? E.g。

#time "on"
for i in 1..1000000 do
    let r = f(i)
    ignore r

给出F#交互输出,如

--> Timing now on
Real: 00:00:00.000, CPU: 00:00:00.000, GC gen0: 0, gen1: 0, gen2: 0

在任何情况下,我认为简单地将代码放在应用程序中并针对应用程序运行配置文件比NUnit测试更好。无论哪种方式,是的,将代码粘贴到新应用程序并在发布模式下编译可能需要额外30秒的时间。但是,我很乐意为获得Visual Studio提供的丰富的分析信息付出代价。理想情况下,体验可能会更好,但我怀疑你今天(或明天)会找到任何适合REPL的分析工具。

答案 1 :(得分:4)

您可以尝试使用探查器编程API来实现此目的。我没试过这个,但这里是ANTS探查器的说明:http://help.red-gate.com/help/ANTSProfiler3/0/en/Topics/AP_UsingTheAPI.html

我认为以下内容可能会成功:

  1. 启动ANTS探查器并附加到fsi.exe
  2. r fsi中的“RedGate.Profiler.Api.dll”

  3. 使用RedGate.Profiler.Api.Reset()/ RedGate.Profiler.Api.TakeSnapshot()
  4. 为您要分析的代码注入

    DotTrace有(有?)类似的API(CPUProfiler.Start()/。StopAndTakeSnapshot()),但我找不到最新版本的参考。

答案 2 :(得分:1)

  

但这是我们现在用F#做的最好的事情吗?

AFAIK,是的。对于下一版本的F#或第三方产品中的功能,这是个好主意!