Szybkość odczytywania plików.

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
robal1024
Piegowaty Guziec
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.

Post autor: robal1024 »

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.
Awatar użytkownika
beluosus
Zakręcona Traszka
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.

Post autor: beluosus »

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?
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: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()?
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.

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 :)). Swap w takim wypadku powinien być szybszy niż Twoje zmagania z plikiem. Jeśli nie masz swapa to możesz go stworzyć i to będzie raczej najprostszym rozwiązaniem - niech system się martwi. ;)
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
robal1024
Piegowaty Guziec
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.

Post autor: robal1024 »

A czy mógłbyś oszacować jaki będzie stosunek szybkości: pliki binarne || przechowywanie w pamięci komputera || pliki tekstowe?
Awatar użytkownika
leon1313
Zakręcona Traszka
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.

Post autor: leon1313 »

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 dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
robal1024
Piegowaty Guziec
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.

Post autor: robal1024 »

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?
Awatar użytkownika
beluosus
Zakręcona Traszka
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.

Post autor: beluosus »

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.
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Bing [Bot] i 5 gości