[Mono-list] question about regular expressions in Mono on Windows

Davy Brion ralinx@gmail.com
Sat, 31 Jul 2004 15:35:54 +0200


about six weeks ago, i thought i found a memory leak in the Regular
Expressions part of Mono, and i mailed a testcase to the mono list but
Gonzalo said the problem didn't occur when he tried it.  This was around
the mono 1.0 beta2 timeframe iirc.

On Linux, i don't have that problem anymore, but i've recently managed
to get my application working on Windows (with GTK#) but unfortunately
it is leaking a lot of memory on Windows.  I've tracked it down and it
turns out that it's because my application uses regular expressions on
strings a lot.  with a lot i mean like almost continiously actually.
If i comment out the line of code that checks for the regular
expression, the memory usage is normal.  If i let it execute the
regular expression, and comment out the stuff that should be executed
after that, i can already see the memory usage going up.  This only
happens on Windows, not on Linux.

I've tried a lot of stuff to work around this problem, but i'm getting
pretty desperate to be honest.  I really have no clue what else i can
try to avoid this problem.

the following testcase illustrates the problem on Windows:

using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;

class MainClass
{
       public static void Main(string[] args)
       {
               Match match;
               string strPattern = @"\w \w \w \w \w: \d";

               for (long i=0;i<50000;i++)
               {
                       string strTest = "This is a simple test: " +
i.ToString() ;
                       match = Regex.Match(strTest,strPattern);
                       Console.WriteLine(i);
                       Thread.Sleep(10);
               }
       }
}

if i run that on windows, and i watch the memory usage in the Task
Manager, the memory just keeps going up.  The longer it runs, the more
memory it uses.

i'm using the combined mono/gtk# installer for windows if that makes
any difference.

thanks