我正在使用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
答案 0 :(得分:1)
我希望问题是字符串。
字符串是不可变的,这意味着每次您认为通过执行此操作来更改字符串
data = data + currentField
你实际上是在内存中创建另一个新字符串。因此,如果您这样做了数千次,它可能会导致问题,因为它们会挂载并且您会收到OutOfMemoryException。
如果要构建字符串,则应使用StringBuilder。