Sergei Gorelkin schrieb:
The issue was that, whenever compiler needs to output a message, it:
- loads a messagefile (once in a session)
- looks up the message by number
- performs the parameter substitution (this involves AnsiStrings, so is
somewhat heavy)
- only then checks if it should really print the resulting string.
The most amount of messages come from unit search; the system units are
loaded every time, so you always have about several thousands messages
loaded and discarded. This was taking a noticeable amount of executed
CPU instructions (profiled with Valgrind).
This is just what I concluded from a quick glance at the implementation.
With the patch applied in r9297, I was able to cut the total number of
executed instructions down by 20%, but that gave no increase in
perceived speed of compilation. So I decided not to put much more effort
to this issue.
Good to know :-)
I think that it's time to put aside old experience, and replace it by
up-to-date performance considerations. And since FPC seems to be
optimized and tested very well, even if it doesn't look so at the first
glance, I better concentrate on other tasks.
Although, modifying the messaging system in a way when CheckVerbosity()
is called as soon as possible (before parameter substitution and other
processing) could be beneficial.
Then at least one can be sure that the mentioned overhead can not occur
any more.
DoDi
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel