On Jan 31, 2010, at 8:35 AM, Gabi wrote:
> Is there any efficient way to get the number of times a given
> function was executed (in run time not during profiling)? Maybe with
> some clever use of its metadata ?
Clojure function calls are low-level operations for efficiency. I'm not aware
of any easy hook for implementing that kind of profiling in Clojure. If you're
interested in a particular function, consider dedicating an atom to holding a
count of its calls and incrementing the value held by that atom on each call:
user=> (def sqr-call-count (atom 0))
#'user/sqr-call-count
user=> (defn sqr [x] (swap! sqr-call-count inc) (* x x))
#'user/sqr
user=> (sqr 3)
9
user=> @sqr-call-count
1
user=> (def b (map sqr (range 100)))
#'user/b
user=> @sqr-call-count ; map is lazy
1
user=> b
(0 1 4 9 16 25 36 ... 9801)
user=> @sqr-call-count
101
user=>
It's possible such a count could be kept in the function's metadata as you
suggest. If this kind of count were needed for a large number of functions, I
would stick with a single atom that held a map from function to count (or var
to count) that I updated with swap!, update-in, and inc.
--Steve
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en