UberProf performance improvements, nothing helps if you are stupid
The following change took a while to figure out, but it was a huge performance benefit (think, 5 orders of magnitude). The code started as:
private readonly Regex startOfParametersSection = new Regex(@"(;\s*)[@:?]p0 =", RegexOptions.Compiled);
And the optimization is:
private static readonly Regex startOfParametersSection = new Regex(@"(;\s*)[@:?]p0 =", RegexOptions.Compiled);
The story behind this is interesting, this piece of code (and a few others like it) used to be in a class that has a singleton lifestyle. At some point, it was refactored into a command class that is created often, which obviously had… drastic effect on the system performance.
Comments
Funny bug. It seems this object was polluting address space of application while being compiled again and again into new assembly and hooking up till app ends.
still odd though, as creating a regex will always pull a cached instance into itself which does the actual work. You have a little bit of overhead from looking up the instance and the key construction (check the ctor) but it's not recompiled over and over again. So that it has drastic performance improvements is a little unexpected.
Creating a new Regex object with the compiled option does cause it to be compiled over and over, destroying performance. I've been caught out by it myself.
The solution is to either reuse the same object or use one of the static methods on Regex, which do look up to see whether a compiled instance of the regex already exists.
MS actually recommend to use the static methods on Regex in most cased since it'll be cached automatically. I've always found it more intuitive to do the caching myself hence turn it into a static field.
Firefly,
The problem is that you only get ~15 LRU cache.
That doesn't work for something like the profiler, who does a LOT of regexes
Have you tought about not using Regexes at all?
I have to do a lot of text processing.
Can you think of anything better suited than regexes to do that?
From both performance and maintainability points of view?
"Nothing helps if you are stupid" -- love it; my QOTD!
Definitely QOTD, and quite fitting, given the emails that I've just been handling today.
Comment preview