2012-02-29 7 views
5

Próbuję odczytać w pliku tekstowym 150 MB w polu tekstu sformatowanego.C# - Odczyt w dużym pliku tekstowym (150 MB) w polu tekstu sformatowanego

Obecnie używam StreamReader do iteracji przez każdą linię w pliku, dołączając każdy wiersz do instancji StringBuilder.

Działa to dla mniejszych plików, ale podczas próby odczytu dużych plików pojawia się wyjątek System.OutOfMemory.

Nie widzę żadnych problemów z odczytaniem pliku 150 MB - jest dużo pamięci fizycznej i jest to dobrze w 32-bitowej przestrzeni adresowej aplikacji Windows.

Jeśli ktoś ma pomysł, jak to zrobić, byłoby to bardzo cenne.

Założę mój kod na końcu.

Dzięki.

StringBuilder sb = new StringBuilder(); 
using (StreamReader sr = new StreamReader(fileLocation)) 
{ 
    string line; 
    while ((line = sr.ReadLine()) != null) 
    { 
     sb.AppendLine(line); 
    } 
    } 

return sb; 
+0

+1, dobre pytanie. –

+1

Czy możesz wysłać ślad stosu? Dzięki temu możemy dokładnie zobaczyć, gdzie występuje wyjątek. Może to być również powiązane: http://stackoverflow.com/questions/363680/stringbuilder-for-concementation-throws-outofmemoryexception (dotyczące konstruktorów stringów) – Christoffer

+1

Proszę wyjaśnić, czy ten kod (część do czytania) rzuca wyjątek czy to się dzieje, gdy ładujesz RTB? –

Odpowiedz

5

Zastosowanie RichTextBox.LoadFile

http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.loadfile.aspx

Nie jestem pewien, dlaczego chcesz, aby załadować cały tekst do StringBuilder. Alternatywnie możesz przekazać FileStream do LoadFile, który wyrenderowałby dla Ciebie duży plik.

+1

Obawiam się, że powoduje to również wyjątek System.OutOfMemoryException. Jakieś pomysły? –

+0

+1, dobra odpowiedź. Nie wiem do tej pory. –

0

Chyba powinien zarządzać jakoś plik wejściowy - powiedzmy podzielić ją na kilka mniejszych plików i nawigować pomiędzy częściami programowo lub tak ..

plik 150MB brzmi jak coś nienormalnego. Może powinieneś popatrzeć na przetwarzanie danych strumieniowych zamiast na plikowy.

Powiązane problemy