Ich habe eine Textdatei mit 21000 Zeichenfolgen (jeweils eine Zeile) und 500 MB anderen Textdateien (Maily Quellcodes). Für jede Zeichenfolge muss ich feststellen, ob sie in einer dieser Dateien enthalten ist. Ich habe ein Programm geschrieben, das den Job erledigt, aber seine Leistung ist schrecklich (es würde das in ein paar Tagen tun, ich muss den Job in maximal 5-6 Stunden erledigt haben).
Ich bin mit C#, Visual Studio 2010Suche nach mehreren Zeichenfolgen in mehreren Dateien
Ich habe einige Fragen in Bezug auf mein Problem zu schreiben:
a) Welcher Ansatz ist besser?
foreach(string s in StringsToSearch)
{
//scan all files and break when string is found
}
oder
foreach(string f in Files)
{
//search that file for each string that is not already found
}
b) Ist es besser, eine Datei Zeile für Zeile
StreamReader r = new StreamReader(file);
while(!r.EndOfStream)
{
string s = r.ReadLine();
//... if(s.Contains(xxx));
}
oder
StreamReader r = new StreamReader(file);
string s = r.ReadToEnd();
//if(s.Contains(xxx));
c) Einfädeln Leistung verbessern würde zu scannen und wie das zu tun?
d) Gibt es eine Software, die das tun kann, damit ich meinen eigenen Code nicht schreiben muss?
tun müssen, um das Programm zu schreiben? Windows hat fainstr eingebaut. Sie können eine for-Schleife verwenden, die diese anderen Dateien parallel durchsuchen könnte. –
Definitiv keine korrekte/vollständige Antwort, aber nicht alle (500MB!) Dateien für jeden String laden. Sobald Sie die Datei im Speicher haben, führen Sie alle Ihre Aktionen aus. – Bertvan
Ich möchte ganze Datei nacheinander laden, nicht 500 MB Dateien gleichzeitig. – Ichibann