using System; using System.Diagnostics; using System.Text.RegularExpressions; using System.Threading; namespace Testbed { class Program { static void Main(string[] args) { Thread t = new Thread(() => { // Common stuff for quick benchmarking Stopwatch sw = new Stopwatch(); int maxNum = 1000; maxNum++; string regex; string test; for (int num = 1; num < maxNum; num++) { regex = "(a?){" + num + "}a{" + num + "}"; test = ""; for (int i = 0; i < num; i++) { test += "a"; } try { Console.Write("num = {0}:\t", num); sw.Start(); Regex.Match(test, regex, RegexOptions.None, TimeSpan.FromSeconds(30)); sw.Stop(); Console.WriteLine("{0} ms", sw.Elapsed.TotalMilliseconds); } catch (RegexMatchTimeoutException) { Console.WriteLine("Match timeout"); break; } finally { sw.Reset(); } } }); t.Start(); } } }