C#内存泄漏?

Dav*_*nko 4 c# regex memory-leaks

由于内存使用率很高,以下代码在一段时间后崩溃(我打开taskmanager并且其使用的内存不断增加).但我看不到任何内存泄漏,除了垃圾收集没有完成它的工作.有什么建议?

//Load a list of regex
//Load a list of phrases
//Open a output file

foreach (string regexString in regexList)
{
    int num = 0;

    Regex regex = new Regex(regexString, RegexOptions.Compiled | RegexOptions.IgnoreCase);

    foreach (string phrase in phraseList)
            num += regex.Matches(phrase).Count;

    if (num > 0)
    {
        output.WriteLine(String.Join(" ", num, phrase));
        output.Flush();
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

完整代码:http://pastebin.com/0SQYn44z

EDIT2:

我发现并发布了解决方案(foreach循环)感谢所有试图提供帮助的人.

Eli*_*ing 6

我无法从你的例子中看出,但RegexOptions.Compiled旗帜可能会导致问题.来自msdn:

Compiled指定将正则表达式编译为程序集.这会加快执行速度,但会增加启动时间.调用CompileToAssembly方法时,不应将此值分配给Options属性.

如果将正则表达式编译为程序集,则在重新启动应用程序之前无法卸载生成的代码,因为.Net不会卸载程序集.

这意味着如果你有很多不同的正则表达式,并且你没有重用它们,那么编译的正则表达式通常不是一个好主意.

  • 好的,但无论如何都要停止使用`Compiled`选项.你使用它的方式,它可能不足以抵消自己的成本. (2认同)