Hi,
ich habe ein kleines Programm welches echt super funktioniert, aber
leider wird das ziemlich schnell langsam...
Der Fehler ich "reproduzierbar" ... sicherlich Erzeug ich irgendwo im
Hintergrund Daten ohne ende oder so, evtl. hat jemand einen Tipp für
mich.
ich habe eine kleine Methode welche einen Datenbankabruf macht und 5
Zeilen aus der Datenbank holt... <- da hier Millionen schlecht
indizierte Daten sind, dauert das ganze fast 5 Sekunden (ist aber nicht
das Problem).
1 | public static DataTable Sql2DataTable(string tns, string query)
|
2 | {
|
3 | DataTable result = new DataTable();
|
4 | try
|
5 | {
|
6 | using (OracleConnection dbConnection = new OracleConnection(tns))
|
7 | {
|
8 | OracleCommand command = dbConnection.CreateCommand();
|
9 | command.CommandText = query;
|
10 | dbConnection.Open();
|
11 | using (OracleDataReader reader = command.ExecuteReader())
|
12 | {
|
13 | result.Load(reader);
|
14 | }
|
15 | dbConnection.Close();
|
16 | }
|
17 | }
|
18 | catch (Exception ex)
|
19 | {
|
20 | MessageBox.Show(ex.Message);
|
21 | }
|
22 | return result;
|
23 | }
|
anschließend werden die Daten über ein Binding direkt an ein eine
DataTable gebunden...
als Hauptprogramm habe ich eine DataTable mit ~200 Zeilen, wenn man eine
Zeile anklickt, wird diese "geöffnet" und es erscheint eine
"Mini-Tabelle" in welcher die 5 Zeilen geladen werden...
Das Laden mache ich (wie oben bereits erwähnt) über ein Binding im
DataGrid:
ItemsSource="{Binding Path=ID, Converter={StaticResource dataReader},
ConverterParameter=prm,IsAsync=True,FallbackValue='Please Wait'}"
Das funktioniert das 1. mal perfekt! Das 2. mal (also wenn ich eine 2.
Datenzeile anklicke) etwas langsamer und das 3. mal merkt man schon
deutlich, dass z.B. das Scrollen durch die Hauptliste langsamer wird
(dabei habe ich einen i7 und 16GB RAM).
kann man hier schon eine Aussage treffen? oder welche Informationen
müsste ich noch liefern?