[fpc-devel] Improving Ref Counting
uberto at ubiland.net
Mon Feb 28 08:34:27 CET 2005
> You can finalize it, so that it releases all private resources. That's
> common practice in a GC environment. But then you are responsible when
> the interfaced object is referenced from one of the still remaining
> references, and it fails to act properly due to the missing resources.
I wish I could use an interface exactly how I could use an object
(create..try..finally..free). But that it's another topic.
> > Anyway, why you're saying that refcount is slow? Do you have any
> > benchmark?
> > If I recall you mentioned try..finally as the bottleneck, but AFAIK
> > modern cpu should do it almost with zero overhead, differently from
> > try..except.
> Please separate the overhead in normal operation from the overhead in
> exception handling.
I agree, but the ratio between try..finally without and with raised exception
is something about 10000/1, and often an exception break the loop anyway.
IMHO from a performance pov only try..finally without exception matters.
At least if you're not Chad! (pun to the author of Indy ;)))
> We had a lengthy thread about exception handling in
> a Delphi group
there's one on Borland groups years ago, too.
> In normal operation a Try block requires to push and pop some pointers,
> comparable to the argument handling of a subroutine call. The invocation
> of the Finally code may cost a few extra cycles, because it has to be
> executable both in normal and abnormal program flow. The Exception code
> executes only when an exception occurs, so it does not add any time
> penalty in normal operation. Consequently one should eliminate chances
> for exceptions, not try/except/finally blocks ;-)
My experiences and that lengthy discussion differs here:
try ... finally ... end;
is almost negible, without exception raised at least. I've no data here but
with or without the block the time is quite the same.
try ... except ...end;
instead is really really really slow.
with kylix the times were a bit higher but restoring after a exception was
I want to crono fpc now! ;))
More information about the fpc-devel