2010-09-27 6 views

Odpowiedz

4
  1. Patrz: file:read/2 dla dostępu sekwencyjnego do bloków i file:pread/2,3 dla dostępu losowego.
  2. Zobacz opcję compressed w file:open/2.
+0

Być może muszę wymyślić coś, co zapewnia wyższą wydajność produkcji, ale działa to bardzo dobrze w przypadku prototypowania. – Erlang

+0

Czy zmierzyłeś lub zgadłeś? Jestem bardzo zadowolony z 'file: read/2' przy otwartym pliku przy użyciu' [raw, binary, read_ahead] 'i przy użyciu przetwarzania zorientowanego na blok. Jakiej wydajności oczekujesz? –

5

Według mojego doświadczenia, pliku: odczyt/2 sam będzie bardzo powolny jeśli nazywany często z małymi ilościami danych, pomimo read_ahead i raw. Na dodatek musisz zaimplementować bufor binarny. Jeśli chodzi o przetwarzanie blokowe, to zgadzam się.

Mówię o czasach działania kilku godzin (z plikiem : odczyt/2) w porównaniu z 2 minutami (z buforowaniem zaimplementowanym w czystym Erlangu).

Oto moje pomiary przeczytaniu kilku 10 bajtów na raz:

%% Bufsize vs. runtime [ns] 
%% 50  169369703 
%% 100  118288832 
%% 1000  70187233 
%% 10000  64615506 
%% 100000 65087411 
%% 1000000 64747497 

W tym przykładzie wydajność naprawdę nie zwiększać ponad 10 KB rozmiar bufora, ponieważ względna napowietrznych dla pliku: czytaj staje się wystarczająco mały.