Autor Thema: mal eine mehr theoretische Frage zu Speicherplatznutzung (Garbage Collection)  (Gelesen 1537 mal)

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
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
« Letzte Änderung: 06.05.10 - 10:20:49 von Don Pasquale »

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
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
« Letzte Änderung: 25.03.03 - 09:15:52 von Rob Green »
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
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
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
@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
« Letzte Änderung: 25.03.03 - 09:40:25 von Don Pasquale »

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
diese "Ideen" stehen alle in dem erwähnten Booklet...müßte auf LDD bei den Redbooks zu finden sein, bin mir aber nicht sicher.
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
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.
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz