Christian, Hi, thx for your answer, sry for forgetting local:call($fun,$args) {$fun($args)} definition. I ran the test within BaseX gui as you suggested, but it is showing a "correct" behavior (see below). Thus this point is probably due to an overhead in using eclipse.
I registered anyhow some suspicious behavior while profiling, but clearly need more time to analyze the point. I will probably come back over this topic soon if you don't mind. Note that this analysis is quite difficult to do because I can't use xquery info view for my "real" queries : the gui is freezing. It appears that it is trying to dump an enormous map with which I am working. declare function local:test($i){fn:for-each(1 to $i, function($a){2*$a})}; declare function local:fun-profile($fun,$args) {try{$fun($args)} catch *{()}}; declare function local:fun-profile2($fun,$args) {$fun($args)}; prof:time(count(local:fun-profile(local:test#1, 10000000))) : 843.18 ms (with BaseX gui) 2015-01-17 17:00 GMT+01:00 Christian Grün <christian.gr...@gmail.com>: > Hi Jean-Marc, > > This time, it was not that obvious to run your query (I stlil didn't > find local:call). But my guess is that the try/catch query is simply > slower, because catching errors simply takes time. I invite you to > look into the info view; it will show you what is inlined and what is > not. > > Best, > Christian > > > On Sat, Jan 17, 2015 at 3:40 PM, jean-marc Mercier > <jeanmarc.merc...@gmail.com> wrote: > > Hello, > > > > To complete the previous threads : > > 1) I forgot a definition : declare function local:call($fun,$args) > > {$fun($args)}; > > 2) The same behavior seems to occurs with the following code, not > involving > > try catch expression : > > > > declare function local:test($i){fn:for-each(1 to $i, > function($a){2*$a})}; > > declare variable $test := prof:time(local:test(10000000),false(),"2 :"); > > prof:time(count(local:test(10000000)),false(),"1 :"),count($test) > > > > Output : > > 2 :2508.42 ms > > 1 :710.51 ms > > > > > > > > 2015-01-17 13:27 GMT+01:00 jean-marc Mercier <jeanmarc.merc...@gmail.com > >: > >> > >> Hello all, > >> > >> I wrote some basic debugging / profiling tools for xquery code, using > >> try{} catch *{} mechanisms. However, profiling tools are not reliable. > >> > >> The suspected reason is that inlining is not activated in try catch > >> expression. If confirmed, is it a desired behavior ? > >> > >> Here is the basic test : > >> > >> declare function local:test($i){fn:for-each(1 to $i, > function($a){2*$a})}; > >> declare function local:fun-profile($fun,$args) > >> {try{local:call($fun,$args)} catch *{()}}; > >> declare function local:fun-profile2($fun,$args) > {local:call($fun,$args)}; > >> > >> With default options (ie inlining activated) > >> > >> prof:time(count(local:fun-profile2(local:test#1, 10000000))) Output : > >> 683.12 ms > >> prof:time(count(local:fun-profile(local:test#1, 10000000))) Output : > >> 2465.47 ms > >> > >> With inlining desactivated (ie INLINELIMIT=0) > >> prof:time(count(local:fun-profile2(local:test#1, 10000000))) Output : > >> 2480.32 ms > >> > > >