Hallo,
ich möchte die Daten einer csv-Datei in eine Datenbank importieren. Es soll eine WPF-Anwendung werden. Beim Lesen der csv-Datei fiel mir auf, dass die WPF-Anwendung viel zu lange braucht. Benutze ich den selben Code in einer Konsolen-Anwendung, dauert es nur ein paar Sekunden. Woran kann das liegen? In der WPF-Anwendung spreche ich die GUI nicht an, jedenfalls nicht bewusst über meinen Code.
Die Konsolen-Anwendung braucht für die 26000 Zeilen ca 10 Sekunden.
Die WPF-Anwwndung braucht für die 26000 Zeilen mehrere Minuten (nach 5 Minuten habe ich abgebrochen).
string csvpath = @"export-7.csv";
int errorcount = 0;
int ticketcount = 0;
string[] arr = new string[26]; //Array für 26 Spalten der csv Datei
StreamReader dateiLeser = new StreamReader(csvpath);
while (!dateiLeser.EndOfStream)
{
string ticketline = dateiLeser.ReadLine();
string[] line = ticketline.Split(new Char[] { '\t' });
try
{
Console.WriteLine(line[0] + " " + line[1] + " " + line[2] + " " + line[3] + " " + line[4] + " " + line[5] + " " + line[6] +
" " + line[7] + " " + line[8] + " " + line[9] + " " + line[10] + " " + line[11] + " " + line[12] + " " + line[13] +
" " + line[14] + " " + line[15] + " " + line[16] + " " + line[17] + " " + line[18] + " " + line[19] + " " + line[20] +
" " + line[21] + " " + line[22] + " " + line[23] + " " + line[24]);
ticketcount++;
}
catch
{
errorcount++;
}
}
Console.WriteLine("Anzahl Fehler: " + errorcount.ToString());
Console.WriteLine("Anzahl Tickets: " + ticketcount.ToString());
Console.ReadLine();
Danke und freundliche Grüße
Verwende einen Profiler (wie zB, den in Visual Studio Debugging Tools), um zu sehen, woran es liegt.
Das einzige, was man hier sieht ist, dass Du den StreamReader nicht richtig behandelst (Du verwirfst ihn nie, Dispose), was aber sicherlich nicht die Geschwindigkeit beeinflusst.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Braucht die WPF-Anwendung im Release-Build genauso lange?
edit: Und bitte die Anwendung mal außerhalb vom Visual Studio starten
Die Konsolenausgabe im Try-Block, wird das in der WPF Anwendung in einer Textbox oder ähnlichem ausgegeben?
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Die Konsolenausgabe in der WPF wird in Visual Studio unter Ausgabe ausgegeben.
Braucht beim Release-Build genauso lange.
Tatsächlich erreiche ich mein Ziel, indem ich die Anwendung außerhalb von Visual Studio starte. Starte ich die exe aus \bin\Debug oder \bin\Release, dann braucht der Code auch nur paar Sekunden. Daran hätte ich gar nicht gedacht. Vielen Dank.
Die Konsolenausgabe in der WPF wird in Visual Studio unter Ausgabe ausgegeben.
Das wird es wohl sein.
Mir ist auch schon einmal aufgefallen, dass diese Umleitung in die Visual Studio Ausgabe eher bremst. Bei einigen Zeilen kein Problem, aber bei 26T sicher etwas anderes..
Wenn du die Exe unabhängig von VS startest, gibt es diese Umleitung entsprechend auch nicht und somit läufts dann genauso schnell