2010-04-19 15 views

cevap

5

Bu metin dosyasına karşı birkaç kez eşleşmek zorunda mısın? Eğer öyleyse, bir HashSet<string> oluştururdum. Aksi takdirde, sadece satır satır satır oku (satır başına bir dize varsayarak) ve eşleşip eşleşmediğini görüyorum.

ASCII'nin 152MB'lık belleği bellekte 300MB'lık Unicode verisi olarak bitecektir - ancak modern makinelerde çok sayıda bellek vardır, bu nedenle tüm lotu HashSet<string> numaralı telefona sabit tutmak, tekrarlanan aramaları çok hızlı bir şekilde gerçekleştirecektir.

bunu yapmak için mutlak basit yolu o zaman atılacak bir dizi yaratacak rağmen, File.ReadAllLines kullanmak muhtemelen - bellek kullanımı için büyük değil, ama muhtemelen çok kötü değil:

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

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

Aslında tekrar tekrar aramak zorundayım. Ama bunu bir web uygulamasında kullanacağım. Bellek birçok istekle bir sorun olur mu? –

+2

@Taz: Hashmap'ı yalnızca bir kez oluşturduğunuz sürece istek sayısı ilgisizdir :) Dokümantasyona göre: * Bu türden herhangi bir genel statik üye iş parçacığı için güvenlidir *, bu yüzden sorun yok – tanascius

+0

@Taz : tanascius haklı. Bir kez yükleyin ve fazladan bellek kullanımı olmadan arama yapabilmelisiniz (birden fazla eşzamanlı iş parçacığı kullanarak, hatta - hiçbir şey yazılmadığı sürece). Web sunucunuz seti tutmak için yeterli belleğe sahip olduğu sürece, işte bu yol. –

3

Ne yapmak istediğine bağlı. Eşleşmeleri tekrar tekrar aramak istediğinizde, tüm dosyayı belleğe (HashSet) yüklerdim. Orada eşleşmeleri bulmak çok kolay.

İlgili konular