Da in der Firma, für die ich arbeite, sehr viele Regular Expressions verwendet werden und wir auch sehr viele mit der Option “Compiled” versehen, ist es interessant zu wissen wie viele Regex denn gecached sind. Leider habe ich keine Möglichkeit gefunden, die Anzahl ohne Reflection zu ermitteln. Über diesen weg sollte es jedoch ziemlich performant sein:
1: public static class RegexHelper
2: { 3: private static ICollection _listFieldInfo;
4: private static readonly object _lockObject = new object();
5:
6: public static int GetCachedRegexCount()
7: { 8: if (_listFieldInfo == null)
9: { 10: lock (_lockObject)
11: { 12: if (_listFieldInfo == null)
13: { 14: _listFieldInfo = (ICollection)typeof(Regex).GetField("livecode", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null); 15: }
16: }
17: }
18:
19: return _listFieldInfo.Count;
20: }
21: }
Ist ganz nützlich, wenn man prüfen will ob die gewählte Cachsize sinnvoll ist.