Tôi có tệp văn bản chứa 21000 chuỗi (một dòng mỗi dòng) và 500 MB tệp văn bản khác (mã nguồn thư). Đối với mỗi chuỗi tôi cần phải xác định xem nó có chứa trong bất kỳ tập tin nào không. Tôi đã viết chương trình thực hiện công việc nhưng hiệu quả của nó là khủng khiếp (nó sẽ làm điều đó trong vài ngày, tôi cần phải hoàn thành công việc trong tối đa 5-6 giờ).
Tôi đang viết bằng C#, Visual Studio 2010Tìm kiếm nhiều chuỗi trong nhiều tệp
Tôi có một số câu hỏi liên quan đến vấn đề của mình:
a) Cách tiếp cận nào tốt hơn?
foreach(string s in StringsToSearch)
{
//scan all files and break when string is found
}
hoặc
foreach(string f in Files)
{
//search that file for each string that is not already found
}
b) Là nó tốt hơn để quét một dòng tập tin bằng dòng
StreamReader r = new StreamReader(file);
while(!r.EndOfStream)
{
string s = r.ReadLine();
//... if(s.Contains(xxx));
}
hoặc
StreamReader r = new StreamReader(file);
string s = r.ReadToEnd();
//if(s.Contains(xxx));
c) có luồng cải thiện hiệu suất và làm thế nào Để làm việc đó?
d) Có phần mềm nào có thể làm điều đó để tôi không phải viết mã của riêng mình không?
làm bạn phải viết chương trình? Bạn có thể sử dụng vòng lặp for có thể tìm kiếm các tệp khác song song –
Chắc chắn không phải là câu trả lời chính xác/đầy đủ, nhưng không tải tất cả (500MB!) tệp cho mỗi chuỗi. Một khi bạn có (một phần của) tập tin trong bộ nhớ, hãy làm tất cả các hành động của bạn sau đó. – Bertvan
Tôi muốn tải toàn bộ tệp một, không phải 500 MB tệp cùng một lúc. – Ichibann