Szybkość odczytywania plików.
-
- Piegowaty Guziec
- Posty: 14
- Rejestracja: 04 kwie 2008, 16:45
- Płeć: Mężczyzna
- Wersja Ubuntu: 8.04
- Środowisko graficzne: GNOME
- Kontakt:
Szybkość odczytywania plików.
Załóżmy, że potrzebuję napisać program, który na początku swojego działania liczy pewne wartości (zmienne liczbowe typu double w c++), a następnie je zachowuje, aby dalej wykorzystać w trakcie dalszego działania.
Wartości typu double może być dowolnie dużo - w skrajnych przypadkach tak dużo, że nie zmieszczą się w pamięci komputera. Dlatego jedynym wyjściem jest zapisywanie tych danych na dysku w pewnym pliku.
Wiadomo, że programując w c++ można zdecydować się na zwykłe pliki tekstowe, albo pliki binarne.
Program będzie potrzebował wielo- (być może miliono-) krotnie odczytać pewną wcześniej zapisaną na dysku wartość.
Wiadomo, że pliki binarne będą działać szybciej w takich warunkach.
Jednak jaki będzie wzrost szybkości obsługi tych plików w porównaniu do plików tekstowych?
Z czego to wynika?
W jaki sposób posługiwać się plikami np. czy trzymać je cały czas otwarte i nie używać plik.close() w funkcji odczytującej, czy może za każdym razem robić plik.open("nazwapliku") i plik.close()?
Sugestie innego typu co do działania programu mile widziane.
Wartości typu double może być dowolnie dużo - w skrajnych przypadkach tak dużo, że nie zmieszczą się w pamięci komputera. Dlatego jedynym wyjściem jest zapisywanie tych danych na dysku w pewnym pliku.
Wiadomo, że programując w c++ można zdecydować się na zwykłe pliki tekstowe, albo pliki binarne.
Program będzie potrzebował wielo- (być może miliono-) krotnie odczytać pewną wcześniej zapisaną na dysku wartość.
Wiadomo, że pliki binarne będą działać szybciej w takich warunkach.
Jednak jaki będzie wzrost szybkości obsługi tych plików w porównaniu do plików tekstowych?
Z czego to wynika?
W jaki sposób posługiwać się plikami np. czy trzymać je cały czas otwarte i nie używać plik.close() w funkcji odczytującej, czy może za każdym razem robić plik.open("nazwapliku") i plik.close()?
Sugestie innego typu co do działania programu mile widziane.
- beluosus
- Zakręcona Traszka
- Posty: 695
- Rejestracja: 01 paź 2006, 15:32
- Płeć: Mężczyzna
- Wersja Ubuntu: inny OS
- Środowisko graficzne: Xfce
- Architektura: x86
- Kontakt:
Odp: Szybkość odczytywania plików.
Np taki int "1234567890" w formie tekstowej składa się z 10 bajtów, w formie binarnej tylko 4. Jest to ponad dwa razy mniej! Sam plik będzie mniejszy przez co i operacje szybsze. Do tego chyba dochodzi konwersja tekstu do liczby.robal1024 pisze:Jednak jaki będzie wzrost szybkości obsługi tych plików w porównaniu do plików tekstowych?
Z czego to wynika?
Myślę, że w wypadku, kiedy intensywnie będziesz korzystał z pliku lepszym rozwiązaniem będzie zamknięciu go dopiero na koniec programu. Tym akurat się nie martw, łatwo to możesz zmienić jak już będziesz miał kod - wtedy sam będziesz mógł porównać co jest szybsze.robal1024 pisze:W jaki sposób posługiwać się plikami np. czy trzymać je cały czas otwarte i nie używać plik.close() w funkcji odczytującej, czy może za każdym razem robić plik.open("nazwapliku") i plik.close()?
Chociaż myślę, że to wszystko jest niepotrzebne w przypadku, kiedy Twój program nie będzie potrzebował więcej pamięci niż ~90% ram + ~90% swap (10% tak na wszelki wypadek


-
- Piegowaty Guziec
- Posty: 14
- Rejestracja: 04 kwie 2008, 16:45
- Płeć: Mężczyzna
- Wersja Ubuntu: 8.04
- Środowisko graficzne: GNOME
- Kontakt:
Odp: Szybkość odczytywania plików.
A czy mógłbyś oszacować jaki będzie stosunek szybkości: pliki binarne || przechowywanie w pamięci komputera || pliki tekstowe?
- leon1313
- Zakręcona Traszka
- Posty: 668
- Rejestracja: 02 sty 2006, 19:35
- Płeć: Mężczyzna
- Wersja Ubuntu: 10.10
- Środowisko graficzne: KDE Plasma
- Architektura: x86
Odp: Szybkość odczytywania plików.
Chyba szybkość dysku będzie miała tu duże znaczenie. Weź pod uwagę jeszcze jedną rzecz: cache.
Poza tym przy dużej ilości danych warto zastanowić się nad podziałem na mniejsze pliki i indeksowanie
Poza tym przy dużej ilości danych warto zastanowić się nad podziałem na mniejsze pliki i indeksowanie
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
-
- Piegowaty Guziec
- Posty: 14
- Rejestracja: 04 kwie 2008, 16:45
- Płeć: Mężczyzna
- Wersja Ubuntu: 8.04
- Środowisko graficzne: GNOME
- Kontakt:
Odp: Szybkość odczytywania plików.
Ale stosunek szybkości odczytywania plików tekstowych i binarnych nie powinien zbyt dużo zależeć od szybkości dysku i pytam głównie o to. Mógłby ktoś pokusić się o takie oszacowanie?
- beluosus
- Zakręcona Traszka
- Posty: 695
- Rejestracja: 01 paź 2006, 15:32
- Płeć: Mężczyzna
- Wersja Ubuntu: inny OS
- Środowisko graficzne: Xfce
- Architektura: x86
- Kontakt:
Odp: Szybkość odczytywania plików.
Tak na oko myślę, że pliki tekstowe będą 2 do 4 razy wolniejsze. Ogólnie w takim zastosowaniu nie widzę sensu zapisywania liczb w formie tekstu. Poza tym byłoby chyba więcej zabawy z kodem.
Kto jest online
Użytkownicy przeglądający to forum: Bing [Bot] i 5 gości