从文件中读取xml时的outofmemory异常

时间:2012-05-15 15:42:20

标签: visual-studio-2010 out-of-memory

我正在使用twitter api数据,在将流结果存储到文本文件后,我将数据输入到解析器应用程序中。我计划的是大数据文件,所以我使用分隔符}}读取内容以分隔各个帖子以避免出错的可能性?备份功能是使用缓冲区读取数据,然后剪切到单个帖子。 但问题是,在某些情况下,对于单个帖子,将发生内存异常。现在,当我查看单个帖子时,它似乎不一定很大,但文本将包含外来字符或某些编码,我猜这会导致内存异常。我还没弄明白是不是这个,但我想从这里得到一些意见或建议......

        myreader.TextFieldType = FileIO.FieldType.Delimited
        myreader.SetDelimiters("]}}")
        Dim currentRow As String()

        Try

            While Not myreader.EndOfData
                Try
                    currentRow = myreader.ReadFields()
                    Dim currentField As String

                    For Each currentField In currentRow
                        data = data + currentField
                        counter += 1
                        If counter = 1000 Then
                            Dim pt As New parsingUtilities
                            If Not data = "" Then
                                pt.getNodes(data)
                                counter = 0
                            End If
                        End If
                    Next
                Catch ex As Exception
                    If ex.Message.Contains("MemoryException") Then
                        fileBKup()
                    End If
                End Try

另一次发生内存异常的时候,我试着分成不同的帖子:

    Dim sampleResults() As String
    Dim stringSplitter() As String = {"}}"}

    ' split the file content based on the closing entry tag
    sampleResults = Nothing
    Try
        sampleResults = post.Split(stringSplitter, StringSplitOptions.RemoveEmptyEntries)

    Catch ex As Exception
        appLogs.constructLog(ex.Message.ToString, True, True)
        moveErrorFiles(form1.infile)
        Exit Sub
    End Try

1 个答案:

答案 0 :(得分:1)

我希望问题是字符串。

字符串是不可变的,这意味着每次您认为通过执行此操作来更改字符串

data = data + currentField  

你实际上是在内存中创建另一个新字符串。因此,如果您这样做了数千次,它可能会导致问题,因为它们会挂载并且您会收到OutOfMemoryException。

如果要构建字符串,则应使用StringBuilder。