2012-05-15 3 views
0

Я работаю с данными twitter api и после сохранения результатов потока в текстовых файлах я ввожу данные в приложение-парсер. То, что я запланировал, это большие файлы данных, поэтому я читал содержимое с использованием разделителя]} для разделения отдельных сообщений, чтобы избежать возможных ошибок? Функция резервного копирования состояла в том, чтобы прочитать данные с помощью буфера, а затем щелкнуть по отдельным сообщениям. Но проблема в том, что в некоторых случаях для одного сообщения возникает исключение памяти. Теперь, когда я смотрю на отдельный пост, он кажется не слишком большим, но текст будет содержать иностранные символы или некоторую кодировку, я полагаю, что вызывает исключение памяти. Я не понял, если именно это еще, но думал, что я хотел бы получить некоторые материалы или советы от сюда ...Исключение outofmemory при чтении xml из файла

 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

Я ожидаю, что проблема связана с цепочками.

Строки неизменны, а это означает, что каждый раз, когда вы думаете, вы изменяете строку, делая это

data = data + currentField 

вы на самом деле создает еще одну новую строку в памяти. Так что если вы делаете это тысячи раз, это может вызвать проблему, потому что они монтируются, и вы получаете исключение OutOfMemoryException.

Если вы создаете строки, вместо этого вы должны использовать StringBuilder.

Смежные вопросы