Datei untersuchen zu Langsam !!! [Umteiger-Frage]



  • Hallo Zusammen,

    ich möchte eine beliebige Datei öffnen und Zeilenweise nach eine String durch suchen. Wenn der String gefunden wurde soll die Zeile in eine Textbox kopiert werden.
    Diese klappt im Ansatz schon!

    Die Methode welche ich benutzte funktioniert, hat nur den Nachteil dass diese sehr langsam ist. Wenn ich eine Datei mit 6000 Zeilen durchsuche braucht das Programm über 40sec.

    Meine Frage :
    Wie kann ich das beschleunigen?
    beim C++Builder würde ich eine Stringliste nehmen, habe aber leider noch nichts Vergleichbares (aus Unwissenheit) gefunden.

    private void zeitmessung(string Art)
    {
        // für Auswertung
        if (Art == "stopp")
        {
            watch.Stop();
            lbl_Zeitmessung.Text = "Laufzeit : " + watch.ElapsedMilliseconds.ToString() + " ms";
        }
    
       if (Art == "start")
       {
           watch.Reset();
           watch.Start();
       }
    }
    
    private void cmd_AuswertungTest1_Click(object sender, EventArgs e)
    {
        textBox1.Visible = false;
        zeitmessung("start");
    
        for (int i = 0; i < richTextBox1.Lines.Count(); i++)
          if (richTextBox1.Lines[i].ToLower().IndexOf(E_SuchString.Text.ToLower()) > 0)
               textBox1.AppendText(richTextBox1.Lines[i].Trim() + "\r"); 
    
        zeitmessung("stopp");
        textBox1.Visible = true;
    }
    
    private void Dateiliste_listBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        // richtTextBox1.Visible = false;
        // richtTextBox1 Benutztung als Globaler Zwischspeicher !! UNSAUBER 
        // Textbox1 = Anzeige des Suchergebniss !!
        //
        zeitmessung("start");
        lbl_Dateiname.Text = E_Verzeichnis.Text + Dateilist_listBox.Items[Dateilist_listBox.SelectedIndex];
        richTextBox1.Clear();
        using ( StreamReader sr1 = new
                StreamReader(lbl_Dateiname.Text, System.Text.Encoding.UTF8, true))
                    richTextBox1.Text = sr1.ReadToEnd();
                // Anzahl eingelesner Zeilen;
        lbl_Zeilen.Text = richTextBox1.Lines.Count().ToString();
        zeitmessung("stopp");
    }
    


  • Du kannst die Zeilen der Textdatei in eine List<String> einlesen.

    Beispiel:

    List<String> lines = new List<String>();
    lines.AddRange(File.ReadAllLines(fileName));
    

    Anschließend kannst du die Liste durchgehen und nach deinem String durchsuchen.



  • Danke für den hinweis !
    So dauert die Auswertung nur noch 140ms.

    mfg


Anmelden zum Antworten