C# schlechte Datenbank laufzeit

Guten Morgen,

also wenn du immer "Alles" auf dem aktuellen Stand brauchst und angezeigt haben willst, wirds wohl nix helfen, dann würde ich die Tips von RudolfG beachten... hört sich Sinnvoll an.

Grundsätzlich würde ich aber sagen, dass das Laden ganzer Tabellen oder gar Datenbanken nicht sinnvoll ist, vorallem bei Daten die sich ständig ändern können durch andere Benutzer, würde ich die Anzeige der Daten halt Filtern(mit WHERE-Klausel), dann hast du auch nie Probleme, weil ja dann gar nicht so viel angezeigt werden muss (von der Datenbank geholt wird).

Mit Suchalgorythmen mein ich, dass du ja bestimmt Dein DataSet durchsuchst, nach bestimmten Datensätzen die angezeigt werden sollen oder? Mach das doch mit der Datenbank, die arbeitet schneller...

Könntest du mal anhand eines praktischen Beispiels erklären was du da eigentlich genauprogrammierst? Dann könnte man sich vielleicht mehr darunter vorstellen, natürlich möchte ich Dir nicht zu nahe treten :D


LG
 
ich programmiere ein tool welches problemmeldungen annimmt. 3 mit arbeiter legen problemmeldungen an, dann sollen die aber bei jedem zusehen sein.

dazu kann das tool auch computer verwalten (die daten z.b. rechnername, ip, die ganzen seriennummern, serviceTag, usw.)

bringt es auch was wenn ich mir im datagrid nur die sachen eines datensatzes einlese (nur das was im datagrid zusehen sein soll) und nicht immer alles? und wenn ich dann drauf klicke das dann ein neues formular kommt und wo dann alles zusehen ist?
 
ich programmiere ein tool welches problemmeldungen annimmt. 3 mit arbeiter legen problemmeldungen an, dann sollen die aber bei jedem zusehen sein.

Für solche Probleme eignen sich Datenbank-Events (ob der MS-SQL-Server bzw. die Datenbank-Klassen den Zugriff auf die Events erlauben/ermöglichen weiß ich allerdings nicht!). Wir benutzen den Firebird-SQL-Server und unsere Anwendungen (in C++) registrieren ein Event, wenn dieser Event z. B. durch insert/update/delete trigger gefeuert wird, bekommen die Anwendungen es mit und können gezielt diesen einen Datensatz in neu laden.

So muss nicht die Anwendungen immer überprüfen ob neue/geänderte Daten vorhanden sind, sondern der SQL-Server (der es ja "weiß") meldet den Anwendungen ob und was sich geändert hat und diese müssen jetzt nur entsprechend darauf reagieren.

bringt es auch was wenn ich mir im datagrid nur die sachen eines datensatzes einlese (nur das was im datagrid zusehen sein soll) und nicht immer alles? und wenn ich dann drauf klicke das dann ein neues formular kommt und wo dann alles zusehen ist?

Das währe natürlich eine Optimierung, da weniger Daten geladen und verwaltet werden.

Gruß
RudolfG
 
Hallo,
ja! genau nach so was suche ich die ganze zeit. Das die Datenbank mir sagt, "es wurde etwas geändert, bitte neuladen".

Ich habe aber leider überhaupt keine ahnung von Datenbank programmierung. Ich weiß nur das es auf jedenfall schneller gehen muss, als es jetzt der fall ist.

ich weiß ja nicht ob ich denn generell einen fehler mache.

ist es denn richtig das ich jedes mal das hier ausführe:

Code:
public void computerFilter()
        {
            try
            {
                if (txtComputerHome.Text.Length >= 2)
                {
                    einsatzuebersicht2DataSetComputer = ((ServerState.Einsatzuebersicht2DataSetComputer)(this.FindResource("einsatzuebersicht2DataSetComputer")));
                    // Lädt Daten in Tabelle "DatagridComputer". Sie können diesen Code nach Bedarf ändern.
                    ServerState.Einsatzuebersicht2DataSetComputerTableAdapters.DatagridComputerTableAdapter einsatzuebersicht2DataSetComputerDatagridComputerTableAdapter = new ServerState.Einsatzuebersicht2DataSetComputerTableAdapters.DatagridComputerTableAdapter();
                    einsatzuebersicht2DataSetComputerDatagridComputerTableAdapter.FillBy(einsatzuebersicht2DataSetComputer.DatagridComputer, txtComputerHome.Text);
                    System.Windows.Data.CollectionViewSource datagridComputerViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("datagridComputerViewSource")));
                    datagridComputerViewSource.View.MoveCurrentToFirst();
                }
                else
                {
                    //einsatzuebersicht2DataSetComputer.Tables["DatagridComputer"].DefaultView.RowFilter = "aktAusgegebenAn LIKE 'DUMMY'";
                }
            }
            catch
            {

            }
                
        }

        public void txtComputerHome_TextChanged(object sender, TextChangedEventArgs e)
        {
            computerFilter();
        }

Ich kann mir aber nicht vorstellen das ich so sehr daneben liege.

Viele Grüße
 
Hallo,
ja! genau nach so was suche ich die ganze zeit. Das die Datenbank mir sagt, "es wurde etwas geändert, bitte neuladen".

Ich habe aber leider überhaupt keine ahnung von Datenbank programmierung. Ich weiß nur das es auf jedenfall schneller gehen muss, als es jetzt der fall ist.

Guck mal ob dir dieser Artikel hilft:

http://msdn.microsoft.com/de-de/library/3ht3391b(VS.80).aspx

Ansonsten hier noch etwas zu events, aber ob es dir hilft bzw. hilfreich sein kann weiß ich nicht:
http://www.exforsys.com/tutorials/sql-server-2005/sql-server-using-event-notifications.html


ich weiß ja nicht ob ich denn generell einen fehler mache.

ist es denn richtig das ich jedes mal das hier ausführe:

Wie ich bereits in dem Post weiter oben gesagt habe, habe ich noch nie was mit diesen Komponenten gemacht und dementsprechend keine Ahnung. Aber vielleicht kann ja ein C#-Entwickler dir hierzu was sagen.

Gruß
RudolfG
 
Kurze Frage die sich mir nach dem Durchlesen stellt. Wie sieht den die Oberfläche aus? Stehen da schon alle Detailinformationen zu dem Problem, oder ist es erstmal nur eine Auflistung mit groben Details wie etwa Lokationsnummer, Problemnummer und Kurzbeschreibung?

Eventuell liegt hier ja auch schon der Hund begraben und eine Optimierung könnte sein, nur Grobinformationen zu laden und erst bei Interesse für spezifische Problemfälle die Details nachzuladen.
Was hier auch noch nicht zur Sprache kam ist der Einsatz von Caching-Mechanismen. Was hast du da bisher unternommen?
 
Eventuell liegt hier ja auch schon der Hund begraben und eine Optimierung könnte sein, nur Grobinformationen zu laden und erst bei Interesse für spezifische Problemfälle die Details nachzuladen.

Eine Optimierung ist/währe das auf jeden fall, aber das behebt nicht sein Problem mit der Aktualität der Daten.

Was hier auch noch nicht zur Sprache kam ist der Einsatz von Caching-Mechanismen. Was hast du da bisher unternommen?

Auch hier hätte man das Problem mit der Aktualität, also dreht man sich solange im Kreis bis man dieses Problem gelöst hat.

Gruß
RudolfG
 
also ich glaub ich hab das "problem" gefunden. Und zwar funktioniert es jetzt wunderbar. wenn ich die exe so ausführe...aber wenn ich es im vs debuge was ich ja zwangsweise brauche. hängt das programm wie oben beschrieben. dann braucht alles sehr sehr sehr viel länger. das habe ich jetzt bei mehreren Rechnern ausprobiert. überall ist das gleiche. die normale exe die nachher rauskommt funktioniert super. aber im debug modus leider nicht. ein blick auf die prozesse zeigt das "devenv.exe" 150.000K an speicher benutzt. und ich dann eine cpu auslastung von mindestens 70% habe. aber woran liegt das? ich brauch den modus. liegt es an meinem programm oder eher an visual studio?
 
Hi,

also ich glaub ich hab das "problem" gefunden. Und zwar funktioniert es jetzt wunderbar. wenn ich die exe so ausführe...aber wenn ich es im vs debuge was ich ja zwangsweise brauche. hängt das programm wie oben beschrieben. dann braucht alles sehr sehr sehr viel länger.
...

aber woran liegt das? ich brauch den modus. liegt es an meinem programm oder eher an visual studio?

das es im Debugger langsammer (u. A. sogar sehr viel langsammer) ist liegt an der Natur der Sache! Der Debugger lädt und überwacht alle Schritte, Funktionsaufrufe und das Laden aller DLL's die von deinem Programm oder ihren abhängenden Libs/Dlls geladen werden. Zusätzlich werden in der Debug-Version zusätzliche Laufzeitinformationen benutzt und verwaltet, damit wenn du Haltepunkte definierst oder Exceptions geworfen werden Visual Studio dir ziemlich viele und genaue Informationen über den aktuellen Zustand/Funktion uns andere Infos geben kann.

Diese alle Informationen und das Überwachen aller Schritte nehmen so einiges an Zeit und Leistung in Anspruch.

Du kannst natürlich in Visual Studio einstellen, welche Informationen alle geladen und überwacht werden sollen, desto mehr du deaktivierst desto wenig und unpräzieser werden die Ausgaben/Informationen die dir Visual Studio bei Fehlern und Haltepunkten liefern kann.

Ich persönlich kompiliere solche zeitkritische Anwendungen immer im Release und baue an den stellen die ich gerne debuggen möchte MessageBoxen ein die mir diese Informationen liefern. Dies ist natürlich nicht optimal aber noch immer besser als bestimmte Zustände im Debug-Modus nicht nachvollziehen zu können.

Gruß
RudolfG
 
Hallo,

also es ist "ok" das der Debug modus SOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO viel länger braucht als wenn ich es nachher so starte? Das problem liegt aber auch nur in der Datenbank geschichte. alles andere läuft super. wo kann ich denn die einzelnen sachen mal "deaktivieren"?
 

Neue Beiträge

Zurück