Domino 9 und frühere Versionen > Entwicklung

Bug bei NotesDocumentCollection

<< < (3/4) > >>

Reiner2005:
Hallo,
danke Bernhard (koehlerbv), die von Dir angegebene Lösung funktioniert. Mit diesem Tipp konnte ich mein Problem lösen. Danke auch an Semeaphoros, durch die zusätzliche Erklärung ist mir nun klar was da im Hintergrund bei Notes abläuft.

Ihr habt mir sehr geholfen, habe zwischenzeitlich schon ziemlich auf Notes geschimpft. Ich bin zwar immer noch der Meinung, dass Notes etwas übereifrig ist beim Dereferenzieren. Eine Referenz sollte erst gelöscht werden wenn auch die abhängigen Referenzen nicht mehr gebraucht werden. So arbeiten zumindest etliche andere Garbage-Collectoren (z.B. Java). Wenn man aber um die Vorgehensweise bei Notes Bescheid weis - so wie nun auch ich - so kann man damit arbeiten.

Meine Lösung sieht übrigens so aus:
Ich habe einfach eine zusätzliche Zeile in die Funktion eingefügt.

set dbGlobalTrick = db

wobei dbGlobalTrick, wie schon der Name sagt, global in der Skriptbibliothek deklariert ist und woanders nicht genutzt wird.


Danke und Grüße,
Reiner
 :) :)

Semeaphoros:
Hmm - Delphi dereferenziert abhängige Objekte (von denen es das weiss) ebenfalls, wenn das Hauptobjekt dereferenziert wird. Java tikt da natürlich anders, was ich irgendwo nachvollziehen kann. Beide Varianten haben ein eigenes Set von Vor- und Nachteilen --- wie oft vergisst man, ein abhängiges Objekt explizit zu dereferenzieren? Und schon ist das "Memory-Bloating" perfekt.

Im Sinne der Pflegbarkeit des Codes hätte ich jetzt keine globale Variable gesetzt, sondern die Sache über einen Parameter, wie von Bernhard vorgeschlagen, gelöst.

Marinero Atlántico:

--- Zitat von: Semeaphoros am 31.03.05 - 19:28:04 ---damit lässt sich das Ressourcenproblem rein von der Serverseite her problemlos kontrollieren. Es macht jedenfalls einen sehr raffinierten Eindruck, und das sind Innereien, die nicht dokumentiert sind.

--- Ende Zitat ---
wie raffiniert es ist, wissen wir nicht, da es nicht dokumentiert ist.

--- Zitat von: Semeaphoros am 31.03.05 - 19:28:04 ------ wie oft vergisst man, ein abhängiges Objekt explizit zu dereferenzieren? Und schon ist das "Memory-Bloating" perfekt.

--- Ende Zitat ---
NO FAIR.   :'(
NO FAIR.   :'(
NO FAIR.   :'(
USTEDES SON UNOS MENTIROSOS.  >:(

In Java werden auch abhängige Objekte eligible for garbage collection, wenn das übergeordnete Objekt genullt wird. Alles andere wäre auch Schwachsinn, da man ja keinen Pfad mehr hat, mit dem man auf das abhängige Objekt navigieren kann.
Wenn ich sowas habe:

--- Code: ---class Person {

 String name;

public static void main (String args[]) {
  Person person = new Person();
  person.name = "jupp";
  person = null;
  // dann ist hier person.name = "jupp" auch eligible for garbage collection
/*
 ansonsten müsste ich ja immer so machen:
  person.name = null;
  person = null;
Aber so ist es nicht. Abhängige Objekte auf die es keinen Zugriffspfad mehr gibt werden mit garbage-collected.
*/
}

--- Ende Code ---
Was nur in den Beispiel passiert. Über die Initialisierung des Rückgabewertes:

--- Code: ---Set getCollection = result

--- Ende Code ---
zeigt eine weitere Variable auf das Objekt und die ist als Rückgabewert der Funktion gesetzt.
Warum die bei der Rückgabe auf Nothing gesetzt wird, finde ich nicht einleuchtend. Wird das nicht by-reference zurückgeben?
In Java würde diese eine Variable auf das Objekt zeigen und es wäre somit nicht eligible for garbage Collection.
Der Rückgabewert einer Funktion gehört nach meiner Logik eindeutig in den - sagen wir - Zugriffsscope der aufrufenden Funktion.

peace

Axel

Semeaphoros:
Gute Frage, da müsste man jetzt die Innereien wirklich kennen. Da die Datenbank beim Verlassen der Function dereferenziert wird, wird der Owner und/oder Parent der Collection dereferenziert. Ob die Collection damit noch eine "Ueberlebenschance" hat, hängt ganz vom inneren Organismus dieses Objektes ab, und Collections in Notes sind alles andere als einfache Objekte ...... somit stehen wir hier wohl aussen vor mit der Betrachtung.

Marinero Atlántico:
yup. Ich denke, dass die Collection NotesDatabase braucht.
Was ich so beobachtet habe ist, dass NotesDatabase ein sehr teures Objekt ist, wo viel drin ist. NotesSession ist dagegen ziemlich klein. Sowas wie NotesCollection auch.
Kann man ganz gut sehen, wenn man extern mit Java drauf zugreift. Da wird ja auch nur der C-code gewrappered.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln