2010-04-19 21 views

Odpowiedz

5

Czy będziesz musiał dopasować się do tego pliku tekstowego kilka razy? Jeśli tak, to utworzę HashSet<string>. W przeciwnym razie po prostu przeczytaj to wiersz po linii (zakładam, że jest jeden ciąg na linię) i zobacz, czy pasuje.

152 MB ASCII kończy się jako ponad 300 MB danych Unicode w pamięci - ale w nowoczesnych komputerach ma dużo pamięci, więc utrzymanie całej serii w HashSet<string> spowoduje bardzo szybkie powtórzenie wyszukiwania.

Bezwzględna Najprostszym sposobem, aby to zrobić, to prawdopodobnie korzystać File.ReadAllLines, mimo że stworzy tablicę które następnie zostaną usunięte - nie wielki dla użycia pamięci, ale chyba nie jest tak źle:

HashSet<string> strings = new HashSet<string>(File.ReadAllLines("data.txt")); 
... 

if (strings.Contains(stringToCheck)) 
{ 
    ... 
} 
+0

Właściwie muszę wyszukiwać raz za razem. Ale zamierzam użyć tego w aplikacji internetowej. Czy pamięć stanie się problemem przy wielu żądaniach? –

+2

@Taz: Liczba żądań jest nieistotna, tak długo jak budujesz swoją hashmap tylko raz :) Zgodnie z dokumentacją: * Wszelkie publiczne statyczne elementy tego typu są bezpieczne dla wątków *, więc nie ma tu problemu, – tanascius

+0

@Taz : tanascius ma rację. Załaduj go raz i powinieneś móc wyszukiwać (używając wielu równoczesnych wątków, nawet - o ile nic nie pisze) bez dodatkowego wykorzystania pamięci. Tak długo, jak twój serwer ma wystarczająco dużo pamięci, aby pomieścić zestaw, to jest droga do zrobienia. –

3

Zależy od tego, co chcesz zrobić. Gdy chcesz powtórzyć wyszukiwanie pasujących wyników, załadowałem cały plik do pamięci (do HashSet). Tam bardzo łatwo wyszukiwać mecze.

Powiązane problemy