Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Don Pasquale am 25.03.03 - 08:48:11

Titel: mal eine mehr theoretische Frage zu Speicherplatznutzung (Garbage Collection)
Beitrag von: Don Pasquale am 25.03.03 - 08:48:11
Hallo Notes-Gurus,

ich habe da mal eine Frage:
Wenn ich eine Funktion entwickle, dann Deklariere ich ja haufenweise Objekte, zerstöre aber keine davon.
Macht das Lotus automatisch wenn ich die Funktion verlasse oder sollte ich das eingenhändig tun ?

z.B.
Function IST_BESITZER_VON_ID (IDENT As String) As String
  
' Funktion IST_BESITZER_VON_ID
' Don Pasquale
' 21.01.2003
  
IST_BEARBEITER_VON_ID = ""
  
Dim session As New NotesSession    
Set db = session.CurrentDatabase
Set view = db.GetView( ANSICHT_NACH_IDENTNUMMERN$ )
Set dc = view.GetAllDocumentsByKey(IDENT, True)
Set doc = dc.getfirstdocument
While Not (doc Is Nothing)

If doc.fldVORGANG(0) <> "" Then
         IST_BESITZER_VON_ID = doc.fldVORGANG(0)
      End If
      Set doc = dc.GetNextDocument(doc)
   Wend  
  
End Function


Was könnte ich hier noch ergänzen um eine im Sinne von Speicherplatznutzung vorbildliche Funtkion zu haben ?

Ciao

Don Pasquale
Titel: Re:mal eine mehr theoretische Frage zu Speicherplatznutzung (Garbage Collection)
Beitrag von: Rob Green am 25.03.03 - 09:13:33
wie in jeder andere Programmiersprache auch (soweit ich nun die kenne, die ich kenn  ;D) ist der Scope und die Referenzierung der Objekte entscheidend.

Notes managed die Speichernutzung automatisch.
Ist eine Variable ("result$= ") oder zB eine referenziertes Objekt ("set doc = session.currentdocument") gesetzt, setzt Lotus Script den "Verweiszähler" um 1 hoch => Speicherplatz reserviert und besetzt.

Solange ein Objekt nicht referenziert ist oder außerhalb seines Scopes, wird der Zähler auf 0 gesetzt und damit ist der Speicherplatz frei (Inhalt ist dann NOTHING).

Wann wird ein Objekt außerhalb des Scopes sein?
Wenn ich im QueryOpen UIDOC=ws.currentdocument => "Feld_Inhalt=uidoc.get..." setze, die Variable "Feld_Inhalt" aber nicht in der Global Sektion als globale "Variable"/"Objektreferenz" deklariere, ist mit Erreichen des nächsten Events (zB PostOpen) "FeldInhalt" wieder leer. Das gilt ebenso für alle Funktionen, Schleifen und Subs. Notes leert seine Memory, wenn Verweise nicht mehr im Scope (in "Reichweite") sind.

Man kann manuell Objektreferenzen leeren und damit die Memory freisetzen, indem man die Anweisung
Delete Objektreferenz verwendet. Dazu ein Beispiel aus einem Lib des Mailbaskets R6...achte mal auf den Kommentar zum Delete, warum Iris das macht.

Case "startdate":
         ' Call Me.m_note.ReplaceItemValue( "EndDate", Me.m_note.GetItemValue( "StartDate" ) )
         ' CStoner 12/9/01 - set date and time in case this spans midnight
         Set NDTstart = New NotesDateTime(Me.m_note.GetItemValue( "StartTime" )(0) ) ' store the time in this date object
         Set NDTend = New NotesDateTime(Me.m_note.GetItemValue( "StartDate" )(0) ) ' store the date in this date object
         Call Me.m_note.ReplaceItemValue("EndDate", TIMEAdjustDate(NDTEnd, NDTStart, ldefdur) )
         Call NDTstart.adjustminute( ldefdur )
         ' Call Me.m_note.ReplaceItemValue( "EndTime",NDTstart) ' spr # DCON5CYT2V
         Delete NDTstart ' clear it out so we know it is ok to use later
         Delete NDTend
         ' we are setting the end time to the start time adjusted by the default duration from the calendar profile
Titel: Re:mal eine mehr theoretische Frage zu Speicherplatznutzung (Garbage Collection)
Beitrag von: Rob Green am 25.03.03 - 09:26:35
ich weiß nicht, ob Dir das was bringt, aber es gibt/gab mal ein Booklet zum Thema Lotus Script,.... "Programmers Guide Lotus Script"...da stehen zB Sachen drin wie

"...For example, LS stores Integers on a 2 byte boundary and a Doublke on an 8 byte boundary. Because of these boundary requirements, you can waste space in a user definded data type when you define its members. For example, if the 1. member variable is a Long value (4 bytes), the Integer value is aligned on a 2 byte boundary and the Long value is aligned on a 4 byte boundary, which results in an undefinded area of memory.

Byte 0: 00000000
Byte 1: 01100001
Byte 2 & Byte 3 undefinded
Byte 4: 00100100

You can use data space efficientlyby declaring members with the highest boundary first (Variant is biggest with 16 btyes), and those with the lowest boundary last (fixed-length Strings). This is especially important because wasted space in the definition of a user defined data type becomes wasted space in every variable of that user defined type."

Also: Reihenfolge ist natürlich Variant -> Double ... Integer...feste Stringlänge

Ok, das als Auszug und wo Du wohl eher speicherschonend programmieren kannst, als zu versuchen, Notes das Speichermanagement "wegzunehmen"  ;D
Titel: Re:mal eine mehr theoretische Frage zu Speicherplatznutzung (Garbage Collection)
Beitrag von: Don Pasquale am 25.03.03 - 09:35:25
@Rob

"You can use data space efficientlyby declaring members with the highest boundary first "

Das ist ja interessant, theoretisch habe ich Speicherfragmentierung in der Schule durchgenommen, aber nie geahnt wie schnell ich zu einer praktischen Anwendung komme.

Wenn ich bedenke, dass ich immer querbeet deklariere ....


Ciao

Don Pasquale

ps. Wenn Du noch mehr solcher Info´s hast, wäre das echt eine eigene Sammlung wert
Titel: Re:mal eine mehr theoretische Frage zu Speicherplatznutzung (Garbage Collection)
Beitrag von: Rob Green am 25.03.03 - 09:41:34
diese "Ideen" stehen alle in dem erwähnten Booklet...müßte auf LDD bei den Redbooks zu finden sein, bin mir aber nicht sicher.
Titel: Re:mal eine mehr theoretische Frage zu Speicherplatznutzung (Garbage Collection)
Beitrag von: Don Pasquale am 25.03.03 - 09:59:35
Könnte es folgendes sein :

Performance Considerations for Domino Applications

http://publib-b.boulder.ibm.com/Redbooks.nsf/9445fa5b416f6e32852569ae006bb65f/bb2af5af66e01de9852567d3006a876a?OpenDocument&Highlight=0,Lotus

Ciao

Don Pasquale
Titel: Re:mal eine mehr theoretische Frage zu Speicherplatznutzung (Garbage Collection)
Beitrag von: Rob Green am 25.03.03 - 10:14:09
das Teil ist auf jeden Fall ein Muss, wenn auch etwas veraltet.

Ich meinte diesen Titel
"Programmers Guide
Lotus Script Rel.3
Cross-Product Basic Scripting Language"
von 1995... :)
mittlerweile verwendet Notes LS4, das auch late binding wie auch early binding kann im Gegensatz zu LS3. Also Vorsicht, wenn man diesen Guide liest, nicht alles ist so wie heute.
Habe mal unter Redbooks auf LDD gesucht und nur das hier gefunden, aber nicht reingeschaut:
http://publib-b.boulder.ibm.com/Redbooks.nsf/RedbookAbstracts/sg244856.html?Open

Könnte einigermassen passen.
Titel: Re:mal eine mehr theoretische Frage zu Speicherplatznutzung (Garbage Collection)
Beitrag von: Don Pasquale am 25.03.03 - 10:26:39
Habe mal unter Redbooks auf LDD gesucht und nur das hier gefunden, aber nicht reingeschaut:

Was mich nicht wundert, da es nicht zum download angeboten wird, sondern nur zum Kauf :-(

Gruß
Don Pasquale