Szybki zapis do pliku

0

Cześć, zastanawiam się, czy są na to jakieś algorytmy. Szukałem trochę, ale niczego nie znalazłem. Weźmy np. pod uwagę jakąś grę komputerową. Jeśli robimy save'a, danych do zapisu jest dość sporo, ale taki zapis trwa bardzo krótko. Jak to jest realizowane? Czy zapis jest przyrostowy? Jeśli tak, to jak to osiągnąć? Przecież przy przyrostowym zapisie i tak musimy przepisać cały albo większą część pliku. Tak to widzę.

0

Bez przesady. Ile zajmuje plik z tym zapisanym stanem gry?. Najważniejsze to zapis dużych bloków danych (np. poprzez buforowanie). Porównaj sobie czas zapisu bloku o rozmiarze 1MB i miliona zapisów po 1 bajcie.

0

Zapis do pliku jest realizowany z reguły po stronie systemu operacyjnego, który wszystkim zarządza. Jeśli wywołujesz np funkcję fprintf(), to nie przejmujesz się przecież tym, co dzieje się za kulisami - dostarczone biblioteki robią to za ciebie, odwołując się do systemowego API czy innych cudów. Kilka megabajtów to akurat żaden problem - rozwiązuje się to tak, jak wspomniał poprzednik: poprzez zapis buforowany. Dzieli się tablicę danych do zapisania na kilka mniejszych części i wywołuje się stosowną funkcję do ich zapisu. Działa to dużo szybciej, niż zapis bajt po bajcie, ale czasem nie można też zapisać wszystkiego na raz, jeśli danych jest za dużo - stąd bufor. O ile nie odwołasz się do niskopoziomowych funkcji systemu operacyjnego, to nie masz - poza tym co zostało wspomniane - wpływu na prędkość zapisu. Nikt raczej w ten sposób nie robi.

0

WriteFile(hf, data, 1MB); no i cześć.

trwa to kilka nanosekund... w porywach mikro, o ile dysk do d**y, np. taki sprzed II wojny, bez DMA...

1 użytkowników online, w tym zalogowanych: 0, gości: 1