Szybsze ni?ż BlockRead?

0

Czy jest coś szybszego do operowania na plikach niż BlockRead, BlockWrite? Operuję na dużych plikach, ale jakoś długo to trwa (około 2-3 sekund, ale chciałbym szybciej, plik ma około 60Mb).

0

Jezeli operujesz na duzych plikach to lepiej sprobuj w asemblerze...najwydajniejszy jezyk programowania :)

0

No cóż, celowo zadałem to pytanie w dziale Delphi, a nie w Inne... Znam tylko podstawy asma, a jakiekolwiek próby tworzenia jego wstawek w Delphi zawsze kończyły się błędem.

0

Szczerze mówiąc nie wiem czy jest coś szybszego.
Ale spróbuj wykonać te same operacje na plikach za pomocą strumieni (TFileStream; z różnymi wielkościami bufora) i plikowych API (CreateFile, ReadFile i WriteFile; również z różnymi wielkościami bufora).
Przetestuj, porównaj szybkości i być może któreś rozwiązanie będzie szybsze od pozostałych.

0

nie wiem czy funkcja odczytująca dane ma tu znaczenie, może po prostu wystarczyłoby dobre indeksowanie danych bo jak sam napisałeś plik ma 60 MB, a nie jest to mało, szczególnie jak chcesz coś w tym znaleźć. Jednak jeśli chodzi Ci o szybkie wczytywanie pliku kiedy program jest już uruchomiony, to skoro wiesz, że będziesz używał ten plik, to np. ważne jego części możesz wcześniej wrzucić do RAMu ( np. podczas startu programu ).

0

Taki jest właśnie problem, że nigdy nie wiem, w którym miejscu będę odczytywał dane. Nie jest to plik rekordowy, ani żaden inny o uporządkowanej strukturze. Jest to File of byte i odczytuję te fragmenty, które są mi potrzebne, czyli używam głównie Seek i BlockRead. Bo tak mi wpadło teraz do głowy, że to może Seek opóźnia cały proces, ale chyba nie.... :-/

//DOPISANE
Poza tym nie lubię obciążać RAMu niepotrzebnie, mam takie ambicje, żeby program zajmował jak najmniej miejsca w pamięci.

0

Watpie aby cos bylo szybszego niz BlockRead/Write Jedyny sposob jaki mi teraz przychodzi do glowy to moze podzielenie pliku na mniejsze kawalki tak powiedzmy po 10MB trzymanie tego w tempie i jak potrzeba to odwolywac sie do konkretnego pliku jesli cos byloby ci potrzebne z dwoch plikow bo np zajmowalo ostatnie 856KB jednego a 234KB jest w drugim to odczytujesz jedne plik a potem drugi i laczysz ;-)

Wiecej pomyslow mi do glowy nie przychodzi poza podzieleniem tego na mniejsze pliki bedzie szybciej raczej :)

0

...mozna by pomoc gdyby bylo wiadomo co konkretnie chcesz napisac.

Baze danych?

0

A skoro szukanie, to może mechanizm plików odwzorowanych (memory-mapped files)? Wiem, że zajmuje trochę RAMu, ale przecież nie musisz całego pliku odwzorowywać, a szukanie w pamięci jest szybsze niż na dysku.

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