title: Why Regex CompileToAssembly giving slower performance than compiled regex and Interpreted Regex?
body: <p>I am using the following code to test CompileToAssembly performance against compiled regex but the results are not appropriate. Please let me know what am I missing. Thanks!!!</p>
  
  <pre><code>static readonly Regex regex = new Regex(@"(stats|pause\s?(all|\d+(\,\d+)*)|start\s?(all|\d+(\,\d+)*)|add\s?time\s?(all|\d+(\,\d+)*)(\s\d+)|c(?:hange)?\s?p(?:asskey)?|close)(.*)", RegexOptions.Compiled);
  static readonly Regex reg = new Regex(@"(stats|pause\s?(all|\d+(\,\d+)*)|start\s?(all|\d+(\,\d+)*)|add\s?time\s?(all|\d+(\,\d+)*)(\s\d+)|c(?:hange)?\s?p(?:asskey)?|close)(.*)");
  static readonly Regex level4 = new DuplicatedString();
  
      static void Main()
      {
          const string str = "add time 243,3453,43543,543,534534,54534543,345345,4354354235,345435,34543534 6873brekgnfkjerkgiengklewrij";
          const int itr = 1000000;
          CompileToAssembly();
          Match match;
          Stopwatch sw = new Stopwatch();
          sw.Start();
          for (int i = 0; i &lt; itr; i++)
          {
               match = regex.Match(str);
          }
          sw.Stop();
          Console.WriteLine("RegexOptions.Compiled: {0}ms", sw.ElapsedMilliseconds);
  
          sw.Reset();
          sw.Start();
          for (int i = 0; i &lt; itr; i++)
          {
              match = level4.Match(str);
          }
          sw.Stop();
  
          Console.WriteLine("CompiledToAssembly: {0}ms", sw.ElapsedMilliseconds);
  
          sw.Reset();
          sw.Start();
          for (int i = 0; i &lt; itr; i++)
          {
              match = reg.Match(str);
          }
          sw.Stop();
          Console.WriteLine("Interpreted: {0}ms", sw.ElapsedMilliseconds);
          Console.ReadLine();
      }
  
      public static void CompileToAssembly()
      {
          RegexCompilationInfo expr;
          List&lt;RegexCompilationInfo&gt; compilationList = new List&lt;RegexCompilationInfo&gt;();
  
          // Define regular expression to detect duplicate words
          expr = new RegexCompilationInfo(@"(stats|pause\s?(all|\d+(\,\d+)*)|start\s?(all|\d+(\,\d+)*)|add\s?time\s?(all|\d+(\,\d+)*)(\s\d+)|c(?:hange)?\s?p(?:asskey)?|close)(.*)",
                     RegexOptions.Compiled,
                     "DuplicatedString",
                     "Utilities.RegularExpressions",
                     true);
          // Add info object to list of objects
          compilationList.Add(expr);
  
          // Apply AssemblyTitle attribute to the new assembly
          //
          // Define the parameter(s) of the AssemblyTitle attribute's constructor 
          Type[] parameters = { typeof(string) };
          // Define the assembly's title
          object[] paramValues = { "General-purpose library of compiled regular expressions" };
          // Get the ConstructorInfo object representing the attribute's constructor
          ConstructorInfo ctor = typeof(System.Reflection.AssemblyTitleAttribute).GetConstructor(parameters);
          // Create the CustomAttributeBuilder object array
          CustomAttributeBuilder[] attBuilder = { new CustomAttributeBuilder(ctor, paramValues) };
  
          // Generate assembly with compiled regular expressions
          RegexCompilationInfo[] compilationArray = new RegexCompilationInfo[compilationList.Count];
          AssemblyName assemName = new AssemblyName("RegexLib, Version=1.0.0.1001, Culture=neutral, PublicKeyToken=null");
          compilationList.CopyTo(compilationArray);
          Regex.CompileToAssembly(compilationArray, assemName, attBuilder);
      }
  </code></pre>
  
  <p>following are the results:</p>
  
  <pre><code>RegexOptions.Compiled: 3908ms
  CompiledToAssembly: 59349ms
  Interpreted: 5653ms
  </code></pre>