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).
Jezeli operujesz na duzych plikach to lepiej sprobuj w asemblerze...najwydajniejszy jezyk programowania :)
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.
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.
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 ).
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.
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 :)
...mozna by pomoc gdyby bylo wiadomo co konkretnie chcesz napisac.
Baze danych?
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.