Autor Beitrag
Parn
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Do 19.04.12 09:13 
Hallo zusammen,
ich habe ein Programm geschrieben, das auf eine Datenbank zugreift, die sich auf einem Netzlaufwerk befindet.

In der Bedienoberfläche befindet sich ein DataGridView Fenster, in dem die Datensätze via BindingSource eingefügt werden.

Das hat in den Tests mit nur ~10 Einträgen in der Datenbank auch alles wunderbar funktioniert. Jetzt habe ich jedoch ~1000 Einträge in der Datenbank und nun ist die Anzeige selbiger im Programm extrem langsam. Das dauert ca. 10s, auch wenn ich die Tabelle nur nach einer anderen Spalte sortieren lasse.
Das Programm ist immer noch exakt das selbe. Die einzige Änderung war in der Anzahl der DB Einträge.

Ich habe das Programm versuchsweise ebenfalls auf das Netzlaufwerk gelegt, jedoch hat sich das ebenfalls nicht positiv auf das Problem ausgewirkt.

Woran kann das liegen? 1000 Einträge in einer DB sind ja eigentlich noch nicht wirklich viel.
Bin für jeden konstruktiven Rat dankbar!
mf Parn
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 19.04.12 09:37 
Zitat:
1000 Einträge in einer DB sind ja eigentlich noch nicht wirklich viel.


Das hängt davon ab was für eine Datenbank du benutzt. Wahrscheinlich hier ein Desktopdatenbank (Access etc.). Dort liegt die Logik für die Sql Abfrage im Treiber der Datenbank also im Prozessraum der Anwendung die diesen Treiber hostet. Wenn du also eine SQL Operation ausführst ala 'gib mir einen Datensatz aus Tabelle soundso' dann kann der Treiber nix anderes machen als sich im Prinzip das Datenbankfile komplett zu ziehen die Tabellendaten raus holen und alles wieder wegzuwerfen was er nicht braucht. Da also die gesamten Daten ständig über die Leitung gehen kann das nicht wirklich schnell sein. Die Daten einer Desktopdatenbank sollte man immer nur da ablegen wo auch der Prozess läuft. Wenn du Anwendung und Daten im Netz verteilst solltest du lieber auf einen Serverdatenbank mit einem entsprechenden Serverprozess setzen oder gleich eine mehrschichtige Anwendung schreiben mit eigenem Serverprozess.

Für diesen Beitrag haben gedankt: Parn
Parn Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Do 19.04.12 10:07 
Hallo Ralf und danke für die schnelle Antwort.
In der Tat verwende ich eine MS Access DB.

Leider habe ich hier nur ein normales Netzlaufwerk zur Verfügung.
Und die DB sollte dort auch tatsächlich liegen.
Man sollte von ~5 PCs über die WindowsForms Applikation darauf zugreifen können.

Was würdest du mir empfehlen?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 19.04.12 10:12 
Zitat:
Was würdest du mir empfehlen?


Bei einer verteilten 2-schichtigen Access Multiuseranwendung? Ein dickes Fell ;)


Empfehlungen wäre eine Serverdatenbank oder eben ein eigener Serverprozess der den Zugriff auf die Accessdatenbank regelt und so nah wie möglich am Datenbankfile läuft. Also am besten auf dem gleichen Server.