【发布时间】:2010-10-18 01:41:15
【问题描述】:
我有一个生产代码版本的异常日志。
System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
at System.Text.RegularExpressions.Match..ctor(Regex regex, Int32 capcount, String text, Int32 begpos, Int32 len, Int32 startpos)
at System.Text.RegularExpressions.RegexRunner.InitMatch()
at System.Text.RegularExpressions.RegexRunner.Scan(Regex regex, String text, Int32 textbeg, Int32 textend, Int32 textstart, Int32 prevlen, Boolean quick)
at System.Text.RegularExpressions.Regex.Run(Boolean quick, Int32 prevlen, String input, Int32 beginning, Int32 length, Int32 startat)
at System.Text.RegularExpressions.MatchCollection.GetMatch(Int32 i)
at System.Text.RegularExpressions.MatchEnumerator.MoveNext()
它试图处理的数据大约是 800KB。
在我的本地测试中,它运行良好。你有没有见过类似的行为,可能是什么原因?
我是否应该在处理之前拆分文本,但显然在这种情况下正则表达式可能不匹配,因为原始文件是从随机位置拆分的。
我的正则表达式:
编辑 2:
我认为这个特殊的 RegEx 会导致问题,当我在一个孤立的环境中对其进行测试时,它会立即占用内存。
((?:( |\.\.|\.|""|'|=)[\/|\?](?:[\w#!:\.\?\+=&@!$'~*,;\/\(\)\[\]\-]|%[0-9a-f]{2})*)( |\.|\.\.|""|'| ))?
编辑
我的本地测试出错了。我正在加载一个大字符串,然后在其上附加一些东西,这使得 .NET Framework 头晕目眩,然后在 RegEx 期间而不是在字符串操作期间给出 OOM 异常(或随机,所以忽略我之前所说的内容)。
这是一个 .NET Framework 2.0 应用程序。
【问题讨论】:
-
你能列出使用正则表达式的代码吗?
标签: .net regex performance memory out-of-memory