| Autor |
Beitrag |
mexx
      
Beiträge: 1183
|
Verfasst: Di 01.04.03 13:55
Hi,
ich habe eine Anwendung für ein Internet-Cafe geschrieben, bei der es ein Mainmenü gibt, dass alle Kunden verwaltet und Clients, mit denen sich die Kunden am PC anmelden. Das ganze basiert auf einen MySQL-Server unter der Verwendung des ODBC3.51. Soviel zur Einleitung.
Das Problem ist, dass die Clients 14MB Arbeitspeicher benötigen und 32 dlls laden. Das ist mir zu viel. Die Clienst haben zwar zahlreiche Funktionen, jedoch keine, die 14MB rechtfertigen. Sprechen Delphianwendung standartgemäß viele dlls an? Allein der ODBC-Treiber benötgt 4 dlls.
Wie kann ich die Clients Resourcen sparender machen? Da auf machen Rechnern auch Spiele laufen sollen?
|
|
inselberg
      
Beiträge: 458
|
Verfasst: Di 01.04.03 14:07
versuchs mal mit zeos
_________________ hans bist du das ?
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Di 01.04.03 20:02
hi soviel zum Thema MySQL (war wohl einer der Entwickler besoffen  )  . Was spricht gegen eine Access-DB die via ADO angesprochen wird?
grez
msch
|
|
mexx 
      
Beiträge: 1183
|
Verfasst: Mi 02.04.03 12:09
nein, ich bin nicht hans. Mir wurde die MySQL-DB auf einen Linuxserver vorgegeben. Nix mit besoffen.
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Mi 02.04.03 12:36
Hallo,
| MSCH hat folgendes geschrieben: | | Was spricht gegen eine Access-DB die via ADO angesprochen wird? |
das diese schnell Fragmentiert, dadurch groß und langsam wird und nicht wirklich multiusergeeignet ist?
@mexx: Wie greist du auf die ODBC Treiber zu, via BDE? Was genau machen deine Clients? Müssen die die ganze Zeit laufen? Muss die Datenbankverbindung die ganze Zeit bestehen. Greifst du mit Tabellenobjekten oder mit Query-Objekten auf die DB zu. Verwendest du DB-Grids oder ähnliches?
Gruß
Klabautermann
|
|
inselberg
      
Beiträge: 458
|
Verfasst: Mi 02.04.03 12:39
und ich brüll weiter "ZEOOOOSS"
damit kannst du dich sogar zu deiner oma connecten (wenn die in mysql / oder was auch immer) läuft
_________________ hans bist du das ?
|
|
mexx 
      
Beiträge: 1183
|
Verfasst: Do 03.04.03 08:29
Ich gebe der Verbindung zur DB einen Namen, den ich in ODBC definiere. Erstelle einen Alias. Die Programme haben eine Install und installieren nur die BDE-Systemdateien um den alias verwenden zu können. Mit der TDatabase öffne ich die Verbindung und spreche diese über die TQuery's an. Die TQuery's sind mit entsprechenden TDatasource-Kommponenten verbunden, die mir den Wert liefern, den ich in der SQL-Syntax über die TQuery's Abfrage. Der Wert wird in den dafür zugewiesenen Steuerelementen angezeigt. Unter anderem den DBGrid.
Ja, die Clienst laufen die ganze Zeit. Sie senden aller 60s den Wert zu der DB, um die Dauer, zu brechnenen, die der User am PC saß.
Was ist Zeos?
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Do 03.04.03 11:03
Hallo,
dann währe es ersteinmal interessant herauszufinden wieviel Speicher an die BDE geht, oder ob dies überhaupt in deinem 14 MB drin ist.
Vieleicht solltest du überprüfen welche zugrifsart auf die DB am Resourcen schonensten ist. Möglichkeiten sind ODBC (per BDE), ADO und natürlich auch Zeos (habe grade keinen Link).
Dann solltest du versuchen möglichst wenige "unterschiedliche" Komponenten zu verwenden, da für jede der Programmcode in den Speicher muss. Wenn du z.B. ein tTable und ein tQuery objekt hast heist das: 1x tTable Programmcode + 1x tTable Datenblock + 1x tQuery Programcode + 1x tQuery Datenblok. Wenn es 2x tQuery ist, dann benötigt das 1x tQuery Programcode und 2x tQuery Datenblock. Somit sparst du also durch wenig vielfalt Speicher.
Desweiteren solltest du Formulare erst dann erzeugen wenn du sie auch nutzt. Da sie wenn sie noch nicht erzeugt sind auch keinen Speicher verbrauchen. Das heißt aber nicht, das der Speicher sofort wieder zur verfügung steht, wenn du das Formular wieder Frei giebst, da das ganze im Cache zurückbleibt. Ich weiß nicht wie gut da die zuständigen Memory Manager arbeiten. Aber eigentlich sollte der wieder frei gegeben werden wenn er benötigt wird.
Das DBGrid ist mir als Speicherfresser in erinnerung. Ich kriege das glaube ich nicht mehr ganz zusammen, ich glaube aber es hing damit zusammen, das es eben mehrere Datensätze auf einmal anzeigt, welche sich dann auch im Speicher befinden müssen.
Der Zugriff per Querys ist schonmal nicht schlecht, da hier nur die Ergebnismenge übertragen werden muss und nicht die ganze Tabelle.
Wenn die Clients nur deshalb laufen, weil sie alle paar sekunden ein Signal senden, währe es vieleicht keine schlechte Idee zu diesem Zweck eine kleine (nonVCL? KOL?) Anwendung zu schreiben, die ein Signal an den Server sendet, dieser macht dann zentral den Eintrag in die DB so muss der "Sender" nichts über Datenbanken und dergleichen wissen.
Versuche also möchlichst wenig funktionalität stängig im Speicher zu haben. Vieleicht währe es auch nicht schlecht, ein TNA Programm zu haben, das vieleicht noch das 60 Sekunden Signal sendet und andere Programme Starten kann. Diese anderen Programme beiten dann die zusatzfunktionalitäten und werden wieder beendet wenn die Einstellungen vorgenommen wurden.
Wie du siehst habe ich auch keine Superlösung für dich sondern nur ein paar vorschläge.
Das Problem ist, das jeder einzelne recht massive änderungen an deinem Programm erfordert.
Ich hoffe ich konnte trotsdem eine wenig helfen.
Gruß
Klabautermann
|
|
mexx 
      
Beiträge: 1183
|
Verfasst: Fr 04.04.03 09:15
Zunächst erstmal vielen Dank für Deine Antwort. Die erste, mit der ich etwas anfangen kann.
Nun ja, im großen und ganzen sind Deine Vorschläge sehr gut. Nur hat jeder davon Nachteile. Zum einenen der Vorschlag mit den TNA.
Gute Idee! Nur, die Clienst müssen auf GHz Rechner und auf 70MHz Rechner laufen. Da besteht die Gefahr, dass das TNA versagt und gewisse Anwendungen nicht starten kann. Ich sehe darin ein erhöhtes Risiko der Absturzgefahr bei den weniger guten Rechnern. Selbst auf den schlechten Rechner läuft das Programm gut. Es frisst nur Arbeitsspeicher, das TNA würde Prozessorleistung fressen, die manche Rechner nicht haben.
Vorschlag Komponenten zu entfernen. Das habe ich bereits getan. Ich sehe ein, dass ich vile Komponenten in den clients habe, jedoch brauche ich die auch. Das Programm besitz ausserdem senden und empfangen von Zeitberechnungen noch andere wichtige Funktionen. Man ist in der lage einen Kunden am PC auszuloggen. Das geschieht mittels des Mainmenüs. Die Clienst überprüfen regelmäßig ob der Kunden ausgeloggt wurde. Das realisier ich mit TQuery.Locate. Aber das braucht doch nicht soviel MB??!
Ich habe versucht mit TuneUP genauer Informationen über den Speicherverbrauch der Rechner und den Clients zu erfahren. Die BDE wurde nciht einmal mit aufgelistet. Wie kann ich den Speicherverbrauch der BDE herausfinden?
Ich glaube es wird zeit, sich mit ADO und ZEOS auseinander zu setzten.
thx
|
|
|