LER ARQUIVO DE TEXTO GRANDE

MAXCIM 12/08/2015 18:30:09
#449879
olá amigos,

preciso ler um arquivo de texto, em alguns casos, tenho erro de estouro de memoria [Ô]Exceção do tipo [ô]System.OutOfMemoryException[ô] foi acionada.[Ô] uso o código abaixo:
Dim fluxoTexto As IO.StreamReader
fluxoTexto = New IO.StreamReader(nomeArq, System.Text.Encoding.Default)
Dim stext As String = fluxoTexto.ReadToEnd

alguém sabe de algum modo de ler ( de forma rápida) arquivos grandes de texto?

desde já agradeço



JABA 12/08/2015 18:39:56
#449880
Resposta escolhida
1- Qual o tamanho desse arquivo texto?

2- Poste toda a rotina envolvida, não somente a parte que lê o arquivo texto.
MAXCIM 12/08/2015 19:28:43
#449881
oi Jaba,

1- tamanho do arquivo de texto atual 300Mb pode subir
2 código:
Public Function lerArquivo(nomeArq As String) As String
Try
If IO.File.Exists(nomeArq) = False Then Return [Ô][Ô]
Dim fluxoTexto As IO.StreamReader
fluxoTexto = New IO.StreamReader(nomeArq, System.Text.Encoding.Default)
Dim stext As String = fluxoTexto.ReadToEnd
fluxoTexto.Close()
Return stext
Catch ex As Exception
Trata_Erro(ex)
Return [Ô][Ô]
Finally
End Try
End Function
JABA 12/08/2015 20:40:59
#449884
MAXCIM, acredito que o seu problema está no tamanho máximo que uma string pode receber. Se não me engano, o limite é 2 ^ 31 para sistemas 32 bits, que fica em torno de 2147483648 caracteres.
MAXCIM 12/08/2015 20:49:24
#449885
e com faço para trabalhar com string de tamanhos realmentes grandes?
JABA 12/08/2015 21:06:50
#449886
A ideia é mais ou menos assim: Você vai ter que ler esses dados por pedaços, aí quando ocorrer o estouro de memoria, guarda a posição do ponteiro no arquivo. Após isso, use o texto que já está na string para o que você pretende, depois libere essa string e cria uma nova para ler a partir da posição que deu erro.

Pergunta: Onde você pretende jogar esse texto?
MAXCIM 12/08/2015 21:19:19
#449887
é o DUMP do mysql.
leio o arquivo e executo no MySqlScript.execute
NICKOSOFT 13/08/2015 13:11:39
#449917
e ler linha a linha não resolveria?
MAXCIM 13/08/2015 13:15:26
#449919
resolve, Nicksoft, mas é lento, o MySqlScript.execute me permite executar blocos inteiros, isso torna o processo bem mais rápido!
NICKOSOFT 13/08/2015 17:05:09
#449941
mas se não da suporte ao arquivo completo, vai te obrigar a algo assim...
já tive q ler arquivo de mais de Gb nessa condição....
MAXCIM 15/08/2015 10:01:35
#450016
Nick, tem que haver um modo de ler o bloco, o loaddump do mysql é extremamente rápido para subir esse arquivo, o tempo que ele leva para restaurar eu nem li 1/4 das linhas do arquivo. isso mostra que que no código dele , o bloco é tratado inteiramente.
Página 1 de 2 [17 registro(s)]
Tópico encerrado , respostas não são mais permitidas