none
Suche in Word Dokumenten extrem langsam / Optimierung? RRS feed

  • Frage

  • 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

    Donnerstag, 17. Juni 2010 08:23

Antworten