Arbeitsspeicherprobleme

Von der Installation bis zur Auslieferung der Applikation

Moderator: Moderatoren

Antworten
ab-software
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 18. Okt 2005 12:35
Wohnort: 41747 Viersen
Kontaktdaten:

Arbeitsspeicherprobleme

Beitrag von ab-software »

Hallo,

habe eine kleine ca. 600kb große EXE. Im Normalbetrieb verbraucht diese ca. 19MB Arbeitsspeicher. (was mir für diese kleine Exe auch schon sehr viel vorkommt). Bei einem unserer Kunden steigt jedoch der Arbeitsspeicher verbrauch im Laufendenbetrieb ständig. Ich kann es jedoch auf keinem anderen System nachvollziehen.

Jemand ne Idee was das sein könnte ?

Grüße
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Ari,
der Speicherbedarf setzt sich ja nicht nur aus der Größe der EXE sondern auch aus den geladenen DLLs zusammen!
Worin unterscheidet sich der betreffende PC von den anderen? OS? Lokale Installation?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
ab-software
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 18. Okt 2005 12:35
Wohnort: 41747 Viersen
Kontaktdaten:

Beitrag von ab-software »

hallo

der PC auf dem der Fehler auftritt hat als OS ein Windows XP , habe es hier bei uns unter Windows XP und unter Windows 2000 laufen gelassen (auch über längere Zeiträume)
Ansonsten greifen die verschiedenen Rechner alle auf die gleichen DLL Versionen zu.
Das Programm liest lediglich alle paar Sekunden Daten aus einer Datenbank aus und schickt Sie an den ComPort
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Ari,
und sowohl bei Dir als auch bei Deinem Kunden ist alles lokal auf dem PC installiert?
Oder liegen die EXE und/oder die DLLs auf einem Netlaufwerk?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

Beitrag von Gerd König »

Hallo,

wir hatten unter der XBase-Version 1.80 das selbe Problem.

Die Ursache könnte im Garbage-Collector liegen.

Das Hochlaufen des Speichers war weg, nachdem wir kaum noch STATIC-Variable (konsequent keine STATIC-Arrays) verwendet haben. Allerdings sind wir zu diesem Zeitpunkt auch zur (fast) ausschließlichen OOP übergegangen.

Viele Grüße
Gerd
ab-software
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 18. Okt 2005 12:35
Wohnort: 41747 Viersen
Kontaktdaten:

Beitrag von ab-software »

hallo

die Daten liegen immer auf einem Netzlaufwerk.
Staticvariablen verwende ich überhaupt nicht, sondern nur LOCAL's in den Funktionen.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Ari,
kann es sein, dass bei Deinem Kunden vielleicht ein Novell oder Linux Netz zum Einsatz kommt?
Oder ist das auch (wie bei Dir?) normal TCP/IP (oder NetBEUI) von MS?
Normalerweise werden die Dlls ja nur einmalig (für jedes Programm) in den Hauptspeicher geladen...
Geht der Speicher weg, wenn Du immer nur eine bestimmte Funktion dort aufrufst, oder auch wenn das Programm "nichts" macht?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
ab-software
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 18. Okt 2005 12:35
Wohnort: 41747 Viersen
Kontaktdaten:

Beitrag von ab-software »

Das ganze läuft auf einem ganz normalen Windows Netzwerk über TCP/IP.
Der Speicher geht auch weg wenn ich "nichts" mache. Zusätzliche DLL's werden in dem Programm auch nicht geladen. Brauche nur die Standart Xbase DLL's die im gleichen Pfad liegen in dem auch die Exe liegt.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Ari,
also wenn Du (bzw. Dein Programm) "nichts" macht, kann auch kein Speicher weggehen (oder pollt Dein Programm den Comport, auch wenn es "nichts" macht?)!
An Deinem Programm wird es dort wohl nicht liegen!!
Was läuft da noch an Software parallel zu Deinem Programm?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
ab-software
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 18. Okt 2005 12:35
Wohnort: 41747 Viersen
Kontaktdaten:

Beitrag von ab-software »

kann durch fremdsoftware denn überhaupt der speicherbedarf meiner exe wachsen , denn ich sehe ja im Taskmanager das es meine exe ist die den ganzen Speicher frisst.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hmm,
eigentlich nicht.
Was zeigt denn der Taskmanager an, wenn du Dein Programm verkleinerst als Symbol, eine Weile wartest (der Speicerverbrauch dürfte dann erheblich fallen) und dann Dein Programm wieder vergrößerst?
Der Speicherverbrauch müßte dann wieder ansteigen, aber er wird den alten Wert (erstmal) nicht erreichen!
So zuverlässig ist der Taskmanager im übrigen nicht, um so etwas zu prüfen!
Schau Dir mal die Tools von SysInternals an - dort findest Du bestimmt einiges, was Dir bei der Ursachensuche helfen sollte.
Hast Du Dir schon mal den Profiler von Alaska angeschaut? Ich selber habe damit zwar auch keine Erfahrung, aber vielleicht hilft Dir das ja auch?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
ab-software
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 18. Okt 2005 12:35
Wohnort: 41747 Viersen
Kontaktdaten:

Beitrag von ab-software »

Das Programm läuft leider nur in der Taskbar hat also kein eigenes Fenster. Mit dem Profiler habe ich leider auch noch überhauptkeine Erfahrung werde ihn mir aber mal angucken, genauso wie die Tools.

Danke schonmal für deine Hilfe :)
Grüße
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

in den Subscriptionen gibt es einen MemoryWatcher, der solche Speicherlöcher finden soll.
Gruß
Hubert
Bernd Reinhardt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 159
Registriert: So, 16. Apr 2006 11:12
Wohnort: Öhringen

Beitrag von Bernd Reinhardt »

Hallo.
Wir hatten mal ein ähnliches Problem mit Speicherüberlauf.
Über eine API-Funktion haben wir den Standarddrucker umgeschaltet.
Anschließend auch ein Refresh auf die Anzeige.
(Falls system - Drucker offen wird der Pfeil für Standarddrucker aktuell gesetzt).
Diese Funktion hat dann den Speicher auch nicht mehr freigegeben.
Nur Drucker umschalten alleine ging dann.
In ACCESS mit VBA hatte ich das selbe Problem mit dem Speicher.
Es gibt einige Funktionen in Windows die nur Speicher reservieren, aber nicht mehr freigeben.

Verwendest Du API aufrufe?
COM-Port über welche Tools?

Gruß
Bernd
Bernd Reinhardt
fa.reinhardt@gmx.de
Antworten