Laden...

Gleicher Code in Konsole schneller als in WPF

Erstellt von banax vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.457 Views
B
banax Themenstarter:in
29 Beiträge seit 2009
vor 8 Jahren
Gleicher Code in Konsole schneller als in WPF

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

16.807 Beiträge seit 2008
vor 8 Jahren

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.

M
184 Beiträge seit 2012
vor 8 Jahren

Braucht die WPF-Anwendung im Release-Build genauso lange?
edit: Und bitte die Anwendung mal außerhalb vom Visual Studio starten

2.298 Beiträge seit 2010
vor 8 Jahren

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 |

B
banax Themenstarter:in
29 Beiträge seit 2009
vor 8 Jahren

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.

37 Beiträge seit 2014
vor 8 Jahren

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