Speicherverbrauch steigt ständig bei folgendem Code...

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Skywalker
Beiträge: 77
Registriert: 22.09.2004 23:35

Speicherverbrauch steigt ständig bei folgendem Code...

Beitrag von Skywalker »

Code: Alles auswählen

Procedure.s EmpfangeDaten(ID)
  Daten.s = Space(999) 
  BytesRecieved = ReceiveNetworkData(ID, @Daten, Len(Daten)) 
  ProcedureReturn Daten
EndProcedure

If InitNetwork()=1
  Repeat
    Select MessageRequester("", "Mit Server Verbinden", #MB_YESNO)
    Case #IdYes
      ConnectionID = OpenNetworkConnection("pop3.web.de",110)
      result$=EmpfangeDaten(ConnectionID)
      Debug result$
      DummyUser$="USER TEST"+#CRLF$
      BytesSent = SendNetworkData(ConnectionID, DummyUser$, Len(DummyUser$)) 
      result$=EmpfangeDaten(ConnectionID)
      Debug result$
      DummyPASS$="PASS XYZ"+#CRLF$
      BytesSent = SendNetworkData(ConnectionID, DummyPASS$, Len(DummyPASS$)) 
      result$=EmpfangeDaten(ConnectionID)
      Debug result$
      CloseNetworkConnection(ConnectionID)
    Case #IdNo
    End
    EndSelect
ForEver
EndIf

Anbei mal ein stark abgeänderter und vereinfachter Code aus meinem Programm.
Starten ihn mal im Debug-Modus und beobachtet den Prozess im Taskmanager von Windows.
Nach jeden Durchlauf, benötigt das Programm einige Bytes mehr RAM.

Es muß irgendwas mit der ewigen Dimensionierung von "Daten.s=Space(999)" zu tun haben.

Gut, ich könnte die Dimensionierung auch zum Programstart festlegen,
aber mich interessiert trotzdem warum immer einige Bytes mehr benötigt werden.

Testet bitte nicht zu oft, den der Code versucht den User "test" mit Passwort "xyz" bei Web.de anzumelden. :-)

Gruß
Thomas
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

kommt nicht durch das Space.
Sondern durch die Network Cons.... Hab zwar keine Ahnung warum aber: Neue Con -> Mehr Speicherverbrauch (obwohl die alte con. gedownt wurde.)
Benutzeravatar
Skywalker
Beiträge: 77
Registriert: 22.09.2004 23:35

Beitrag von Skywalker »

Mach mal aus Space(999) nur Space(100).

Dann wird, zumindest bei mir, der Speicher nicht mehr erhöht.

Gruß
Thomas
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

hmm,
aber wiso steigert folgendes prog seinen speicherr nicht in unermäßliche?:
Repeat:A$=Space(999):ForEver

:?

Komisch. *schiefguck**confused*
Benutzeravatar
Skywalker
Beiträge: 77
Registriert: 22.09.2004 23:35

Beitrag von Skywalker »

Habe eben mal von pop3.web.de auf pop.gmx.de geändert.
Da passierte das anfangs plötzlich nicht mehr.

Was zum Henker kann das sein?


Gruß
Thomas
Benutzeravatar
diGGa
Beiträge: 249
Registriert: 01.04.2005 11:00
Kontaktdaten:

Beitrag von diGGa »

[trash 1]
web.de müllt dich mit fehlermeldungn zu xD
[trash 0]
Benutzeravatar
Skywalker
Beiträge: 77
Registriert: 22.09.2004 23:35

Beitrag von Skywalker »

Das hat nichts mit den Fehlermeldungen zu tun.
Ich bin bei Strato und wenn ich meine Daten eingebe, komme ich sauber durch.
Allerdings steigt auch hier jeweils der Speicherbedarf an.

Probiere es mit Deiner Kennung aus.

Gruß
Thomas
Dibap
Beiträge: 5
Registriert: 22.10.2004 08:59
Wohnort: 28816 Stuhr
Kontaktdaten:

probier's mal mit 'ner Gloablen Variable

Beitrag von Dibap »

In der Procedure wird die Variable Daten.s erstellt und anschließend aus der Procedur heraus als Return zurückgegeben.

Ich habe den Verdacht, das die Variable, da nicht global und nicht Static, bei jedem Aufruf neu angelegt wird.
Benutzeravatar
Skywalker
Beiträge: 77
Registriert: 22.09.2004 23:35

Beitrag von Skywalker »

Habe im obigen Beispiel die Variabel Daten.s nun mal global definiert und gleich dahinter Daten=space(999) gesetzt.
In der Prozedure wird sie also nur noch befüllt.

Der Speicherverbrauch steigt nun nicht bei jedem Aufruf an, aber nach einiger Zeit dann doch wieder für ein paar Byte.
Manchmal gehts einige Bytes hoch und gleich wieder runter!?

Komische Sache das ganze.
Antworten