Oczywiście w przypadku, gdy plik ma ponad trzy i pół miliona linii tekstu, zastosowanie metody getline() odpada.
Wygenerowalem przed chwila plik o rozmiarze 314 MB, ktory posiadal 10 mln linii tekstu. Przeczytanie tego pliku za pomoca getline trwalo u mnie 1.81336 sek. Przeczytanie tego samego pliku bez uzycia strumieni (funkcja fgets z jezyka C) trwalo 0.885774 sek. Nie wydaje mi sie to jakos specjalnie dlugo. Mozna sie jeszcze pobawic funkcja read i funkcjami z WinAPI - byc moze uda sie przyspieszyc ale pytanie czy warto?
Dzisiaj coś z tym kombinowałem, ale teraz pytanie - jak odnosić się później do konkretnego bufora, aby nie czytać wszystkich po kolei w sytuacji, gdy np. informacja jest w ostatnim wczytanym buforze?
Bufor jest jeden. Czytasz dane z pliku po kawalku i wypelniasz na tej podstawie bufor. Bufor analizujesz w locie - po przeczytaniu kolejnej porcji danych zawartosc bufora powinna byc nadpisywana. Nie ma za bardzo sensu ladowac danych do wielu buforow, no chyba, ze chcesz czytac dane wielowatkowo, ale nie wiem na ile Ci to pomoze.
PS: Nasunęło mi się kolejne pytanie - jak mogę indeksować te bufory? Wymyśliłem sobie zapisywanie zawartości konkretnych buforów do indeksowanej dynamicznej tablicy stringów i późniejsze sprawdzanie, czy w danym stringu jest szukana przeze mnie informacja. Chociaż nie wiem, na ile będzie to dobre rozwiązanie.
Jezeli dobrze Cie zrozumialem, to nie wydaje mi sie to dobrym pomyslem. Zapychasz po prostu niepotrzebnie RAM, a Twoj program bedzie dzialal poprawnie do momentu az system przestanie tolerowac Twoje marnotrastwo - z 300 MB plikiem sobie pewnie poradzi ale z naprawde duzym zbiorem danych to raczej srednio. Pomijam juz fakt, ze jak bedziesz wszystko ladowal do pamieci to mozesz ten program spowolnic a nie przyspieszyc.