Hallo Leute, ich habe eine Suchfunktion welche mir erlaubt *.doc Dokumente zu durchsuchen. Nur das Problem ist, das diese Suche extrem langsam ist. Gibt es da irgendwelche Optiemierungsmöglichkeiten. Mann muss noch fairerweise mitteilen das es sich
um ein Serverlaufwerk in der Form \\Irgendetwas\ handelt und die Dateien einzeln so 100 - 200 kB groß sind. Die Anzahl der zu durchsuchenden Dateien beläuft sich auf 2600 Stück.
Hier mein Code:
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Const ORDNERNAME As String = "\\Test02\Profile" ' Ordner der die Textdateien enthält
Dim Dateiliste As System.Collections.ObjectModel.ReadOnlyCollection(Of String)
Dim Suchbegriffe() As String
Dim TempString As String
Dim TrefferJaNein As Boolean
Dim rgx As Regex
If TextBox3.Text.Trim = String.Empty Then
MessageBox.Show("Sie haben nichts eingegeben!", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If
Dateiliste = My.Computer.FileSystem.GetFiles(ORDNERNAME, FileIO.SearchOption.SearchTopLevelOnly, "*.doc") ' Alle .txt-Dateien
Suchbegriffe = TextBox3.Text.Split(CChar(",")) ' Den TextBox-Inhalt in seine Teile zerlegen
ListBox2.Items.Clear() ' ListBox-Inhalt vorsorglich löschen
For Each Datei As String In Dateiliste ' Für jede Datei in der Dateiliste
TempString = System.IO.File.ReadAllText(Datei, System.Text.Encoding.Default) ' Dateiinhalt auf einen Rutsch lesen
For Each Begriff As String In Suchbegriffe ' Jeden Begriff nehmen
' Nur ganzes Wort suchen --- Groß-/Kleinschreibung ignorieren --- Text geht über mehrere Zeilen
Dim Muster As String = "(\A|[^a-z0-9+/])" & Begriff.Trim.Replace("+", "\+") & "([^a-z0-9+/]|\z)"
' Nur ganzes Wort suchen --- Groß-/Kleinschreibung ignorieren --- Text geht über mehrere Zeilen
rgx = New Regex(Muster, DirectCast(RegexOptions.IgnoreCase + RegexOptions.Multiline, RegexOptions))
'rgx = New Regex("(\b" & Begriff.Trim & "\b)+?", DirectCast(RegexOptions.IgnoreCase + RegexOptions.Multiline, RegexOptions))
If rgx.IsMatch(TempString) = True Then ' Falls Begriff vorkommt ...
TrefferJaNein = True ' ... Schleife nicht beenden, sondern weiter
Else ' sonst ...
TrefferJaNein = False
Exit For ' ... Schleife vorzeitig beenden
End If
Next
If TrefferJaNein = True Then ' Wenn Schleife NICHT vorzeitig beendet wurde
ListBox2.Items.Add(Datei)
End If
Next
End Sub
Danke