CSharp parser performance

Jakob Petsovits jpetso at gmx.at
Sun Aug 6 00:38:27 UTC 2006

On Saturday, 5. August 2006 21:38, Adam Treat wrote:
> Hi all,
> I was testing the C# parser and found that I can parse every file in Mono's
> corelib (minus the tests) and start the KDevelop 4 project in less than 5
> seconds.

You mean mono-[version]/mono/* ?
That's just 325 .cs files (including the tests dir), so it's no big surprise 
that the parser doesn't need much time there.
Here are my benchmarks - three runs (Pentium-M 1.6 GHz laptop, slow hd):

csharp/external-reps/mono-$ find -name "*.cs" | wc -l

time find -name "*.cs" -exec ../../../csharp-parser {} \; -print >& /dev/null

real    0m1.270s
user    0m0.836s
sys     0m0.368s

csharp/external-reps/mono-$ cd ..

csharp/external-reps/mono-$ find -name "*.cs" | wc -l

time find -name "*.cs" -exec ../../csharp-parser {} \; -print >& /dev/null

real    1m42.066s
user    0m55.879s
sys     0m13.889s

csharp/external-reps/mono-$ cd ..

csharp/external-reps$ find -name "*.cs" | wc -l

time find -name "*.cs" -exec ../csharp-parser {} \; -print >& /dev/null

real    2m39.620s
user    1m21.281s
sys     0m20.449s

Thanks to Roberto for the shell magic :)

> I've also determined that the C# parser suffers multi-threading problems.
> When I run more than one parse at a time in multiple threads, I get
> crashes. This probably has to do with the static variables.  Especially the
> char *_G_contents;
> variable.

I'll move that one away, but it's not the problem here (rather a symptom).
The real problem is Flex, which is storing its state between subsequent calls 
of yylex(). So this is maybe the right time for me to try out Flex'
"experimental" C++ class mode.

Hopefully that'll do away with multithreading problems.

> Jakob, I'm also going to work on the kdevelop-pg serialization of AST's.

Won't hold you back!
When you need something from me, well, you know how to find me.

Your favorite parser guy,

More information about the KDevelop-devel mailing list