.NET String.Replace Regex Loop' System.OutOfMemoryException'

时间:2017-07-08 18:04:52

标签: asp.net .net vb.net

所以我的代码已经运行了一段时间。但是,它开始抛出'System.OutOfMemoryException'异常。失败的那个传递包含大约15-20个链接的文本。该错误专门发生在System.String.ReplaceInternal(String oldValue, String newValue)

所以我知道这个问题,我只是不明白为什么。传入的文本包含15个超链接,但文本少于1000个字符。

Public Shared Function MakeLinksInsideText(pText As String) As String

    'regex for hyperlinks
    Dim regxLinks As New Regex("http(s)?://([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?", RegexOptions.IgnoreCase)
    Dim mactchLinks As MatchCollection = regxLinks.Matches(pText)
    Dim strNewText As String = pText

    'loop through all found hyperlinks and replace the URL with a a tag
    For Each matchLink As Match In mactchLinks
        strNewText = strNewText.Replace(matchLink.Value, "<a target='_blank' class='link_orange' href='" & matchLink.Value & "'>" & matchLink.Value & "</a>")
    Next

    Return strNewText

End Function

1 个答案:

答案 0 :(得分:0)

想出来。超链接是一遍又一遍的相同链接。因此,替换函数试图每次在循环中替换该超链接15次。