完整的球拍代码分析指南

Bra*_*ech 5 profiling racket

做了一些谷歌搜索("球拍分析","球拍测量表现"),但没有找到任何,文档中没有例子.甚至谷歌"个人资料"搜索htdp- 没有运气.(profile (f ...))除了小片段之外,输出并不是那么明显.

理想情况下,我想要像python的python -m cProfile用法示例.

Gre*_*ott 11

当我搜索"Python分析"时,DuckDuckGo和Google都将此作为最佳结果:26.4.Python Profilers.

(虽然我很快就扫描了它,但它似乎更像是一个参考而不是一个带有例子的"彻底的使用指南".所以,如果你有别的想法,或许你可以请链接到那个?)

等效的Racket文档将是:Profile:Statistical Profiler.

一个用法示例:

#lang racket
(require profile)
(profile-thunk (thunk (function-to-profile arg0 arg1) ))
Run Code Online (Sandbox Code Playgroud)

这里(thunk e)只是一个方便(lambda () e).


更大的例子:

#lang racket

(module mod racket
  (provide f)
  (define (f)
    (for/list ([i 10000])
      i)))

(require (prefix-in mod: 'mod))

(define (f)
  (for ([i 10000])
    (mod:f)))

(require profile)
(profile-thunk f)
Run Code Online (Sandbox Code Playgroud)

对我来说这个输出:

Profiling results
-----------------
  Total cpu time observed: 5666ms (out of 5753ms)
  Number of samples taken: 105 (once every 54ms)

========================================================
                               Caller
Idx   Total        Self      Name+src             Local%
      ms(pct)      ms(pct)     Callee
========================================================
[1] 5666(100.0%)    0(0.0%)  [running body] /tmp/profile.rkt:##f
                               profile-thunk14 [2]100.0%
--------------------------------------------------------
                               [running body] [1] 100.0%
[2] 5666(100.0%)    0(0.0%)  profile-thunk14 ...e-pkgs/profile-lib/main.rkt:9:0
                               run [3]            100.0%
--------------------------------------------------------
                               profile-thunk14 [2]100.0%
[3] 5666(100.0%)    0(0.0%)  run ...pkgs/profile-pkgs/profile-lib/main.rkt:31:2
                               for-loop [4]       100.0%
--------------------------------------------------------
                               run [3]            100.0%
[4] 5666(100.0%) 1630(28.8%) for-loop /tmp/profile.rkt:12:2
                               f [5]               71.2%
--------------------------------------------------------
                               for-loop [4]       100.0%
[5] 4036(71.2%)  1786(31.5%) f /tmp/profile.rkt:5:2
                               for-loop [6]        55.8%
--------------------------------------------------------
                               f [5]              100.0%
[6] 2250(39.7%)  2250(39.7%) for-loop /tmp/profile.rkt:6:4
--------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

请注意,它确实显示行号,因此即使有两个命名的函数f,也可以看到哪一个 - 实际上是每个函数的哪一部分.


另外,我强烈推荐优化教练包.虽然这会为您提供与传统分析器不同的见解,但它也为您提供了如何更改代码以获得更快的具体建议.作为副产品,它教你如何以这种方式编写它.

  • ps 虽然我认为 Racket 文档总体上非常好,但我同意它可以使用更多示例。 (2认同)
  • @bravmech 如果这回答了您提出的问题,请将其标记为已接受吗?谢谢你。 (2认同)