On 30.01.2011 15:10, Paul Ishenin wrote:
30.01.2011 19:41, Sven Barth wrote:

procedure update_unit_symtable_options;
var
st: tsymtable;
begin
st:=owner;
while not(st.symtabletype in [globalsymtable,staticsymtable]) do
st:=st.defowner.owner;
if objecttype in [odt_classhelper,odt_objccategory] then
include(st.tableoptions,sto_has_classhelper);
end;

remove "if objecttype in [odt_classhelper,odt_objccategory] then" from
this routine to outside - so you will not need to scan owners in the
loop for all object types.
I still see an ability to optimize your implementation.

Sorry, but I don't understand your intention here.
procedure update_unit_symtable_options;
var
st: tsymtable;
begin
st:=owner;
while not(st.symtabletype in [globalsymtable,staticsymtable]) do
st:=st.defowner.owner;
include(st.tableoptions,sto_has_classhelper);
end;

if objecttype in [odt_classhelper,odt_objccategory] then
update_unit_symtable_options;

This will work faster because loop and the function call will run not
for all object types.

Now I understand. Thanks for clarification.

I've done that change.

Timings without that change:

Run 1:

real    1m3.461s
user    0m45.957s
sys     0m4.590s

Run 2:

real    1m10.777s
user    0m46.204s
sys     0m4.696s

Run 3:

real    1m11.596s
user    0m46.690s
sys     0m4.406s

Timings with that change:

Run 1:

real    1m8.919s
user    0m46.597s
sys     0m4.166s

Run 2:

real    1m9.359s
user    0m46.524s
sys     0m4.380s

Run 3:

real    1m8.342s
user    0m46.294s
sys     0m4.490s

Doesn't change much. For comparison timings without the search for class helpers (if-clause in symtable.pas/searchsym_in_class disabled):

Run 1:

real    1m5.040s
user    0m46.050s
sys     0m4.163s

Run 2:

real    1m4.008s
user    0m45.784s
sys     0m4.343s

Run 3:

real    1m6.074s
user    0m45.714s
sys     0m4.546s


It seems that I should have rerun the profiling without class helper search as well after I added the flag yesterday...

I'll nevertheless try to implement Jonas' suggestion to see whether this improves timing a bit more (and maybe the flags can be used to optimize the speed for other types of searches a bit more, like Paul suggested :D )

Regards,
Sven
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to