Hallo zusammen, ich habe ein kleines Performance-Problem.
Ich habe eine Excel-Spalte mit 31.000 Einträgen (1 Wort pro Zeile).
Diese sieht so aus:
Mein Vorhaben ist es, diese in richtige Artikelnummern umzuwandeln. Jede Q-Nummer, hat eine dazugehörige Artikelnummer.
Dafür habe ich ein DataGridView genommen:
Das sind natürlich nicht alle, es geht hier um 31.000 Einträge.
Nun möchte ich aus der EingabeListe, alles in die zugehörige Artikelnummer umwandeln.
Mein Problem: Mein Programm läuft schon seit ungelogen mehr als 48h... Man sieht, dass er arbeitet, aber ich frage mich, ob es diese Woche noch fertig sein wird.
Ich habe 2 Möglichkeiten probiert, eine mit DGV, eine mit RTB. Zweitere Methode spart zwar einige % CPU-Auslastung und RAM ein, aber fertig ist auch die Methode noch nicht nach 48h.
Methode 1:
Methode 2:
Wahrscheinlich sind beide Methoden Müll, aber mir fällt gerade nichts anderes ein.. Gibt es was schnelleres? 48h+ sind halt schon hart für 31.000 Zeilen.
Danke euch!
Grüße,
xored
Ich habe eine Excel-Spalte mit 31.000 Einträgen (1 Wort pro Zeile).
Diese sieht so aus:
Mein Vorhaben ist es, diese in richtige Artikelnummern umzuwandeln. Jede Q-Nummer, hat eine dazugehörige Artikelnummer.
Dafür habe ich ein DataGridView genommen:
Das sind natürlich nicht alle, es geht hier um 31.000 Einträge.
Nun möchte ich aus der EingabeListe, alles in die zugehörige Artikelnummer umwandeln.
Mein Problem: Mein Programm läuft schon seit ungelogen mehr als 48h... Man sieht, dass er arbeitet, aber ich frage mich, ob es diese Woche noch fertig sein wird.
Ich habe 2 Möglichkeiten probiert, eine mit DGV, eine mit RTB. Zweitere Methode spart zwar einige % CPU-Auslastung und RAM ein, aber fertig ist auch die Methode noch nicht nach 48h.
Methode 1:
VB.NET-Quellcode
-
- Option Strict On
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- For i As Integer = 0 To rtbInput.Lines.Length - 1
- If Not String.IsNullOrEmpty((rtbInput.Lines(i))) Then
- Dim rowIndex As Integer = -1
- Dim tempAllowUserToAddRows As Boolean = DataGridView1.AllowUserToAddRows
- DataGridView1.AllowUserToAddRows = False
- Dim row As DataGridViewRow = DataGridView1.Rows.Cast(Of DataGridViewRow)().Where(Function(r) r.Cells("ordernumber").Value.ToString().Equals(rtbInput.Lines(i))).First()
- rowIndex = row.Index
- DataGridView1.Rows(rowIndex).Selected = True
- DataGridView1.AllowUserToAddRows = tempAllowUserToAddRows
- DataGridView1.CurrentCell = DataGridView1.Rows(rowIndex).Cells(0)
- rtbOutput.Text = rtbOutput.Text & vbNewLine & DataGridView1.Rows(rowIndex).Cells(1).Value.ToString
- End If
- Next
- End Sub
Methode 2:
VB.NET-Quellcode
-
- Option Strict On
- Dim AusgabeListe As New List(Of String)
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- For i As Integer = 0 To rtbInput.Lines.Length - 1
- If Not String.IsNullOrEmpty((rtbInput.Lines(i))) Then
- For i2 As Integer = 0 To rtbVergleich.Lines.Count - 1
- If rtbVergleich.Lines(i2).Contains(rtbInput.Lines(i)) Then
- AusgabeListe.Add(GetBetween(rtbVergleich.Lines(i2), "[2]", "[/2]"))
- Label3.Text = AusgabeListe.Count.ToString
- Else
- AusgabeListe.Add("")
- Label3.Text = AusgabeListe.Count.ToString
- End If
- Next
- Label3.Text = AusgabeListe.Count.ToString
- End If
- Next
- For Each str As String In AusgabeListe
- rtbOutput.AppendText(Environment.NewLine & str)
- Next
- End Sub
Wahrscheinlich sind beide Methoden Müll, aber mir fällt gerade nichts anderes ein.. Gibt es was schnelleres? 48h+ sind halt schon hart für 31.000 Zeilen.
Danke euch!
Grüße,
xored