CX_OBJECT_MANAGER::FreeVirtualMemory (ab Dll-Version: 4.5.2.166275)
Beschreibung:
In einer Transaktion allokiert ObjectStore Hilfsobjekte für die Reallocation
der Adressen, die am Ende der Transaktion wieder verschwinden.
Bei einer Verarbeitung mit sehr vielen Objekten in einer langen
Transaktion erreichen wir Größenordnungen von 10 × 106, 100 × 106 Hilfsobjekten
und kommen oft zum Abbruch wegen einer
out of virtual memory Exception.
FreeVirtualMemory startet eine neue ObjectStore Transaktion dann (und nur dann),
wenn der allokierte Speicher den als Parameter übergebenen Maximalwert
überschreitet.
1. Vorsicht: in einer schreibenden Transaktion verliert man die
Kontrolle, wann in die Datenbank zurückgeschrieben wird.
2. Nur einsetzen, wenn durch die Basis-Entwickler geklärt ist, dass in der Verarbeitung kein Memory-Leak im ClassiX®-System die Ursache der out
of virtual memory Exception ist.Code-Beispiel:
iterate(UNSAFE)
{
40 /* in MB */ GetManager(OBJECT) Call(FreeVirtualMemory)
. . .
// immer weiter rekursiv hinabsteigen, noch mehr Objekte "anfassen"
iterate(UNSAFE)
{
. . .
// und immer noch mehr
iterate(UNSAFE)
{
. . .
}
}
}
Stack | Position | Objekttyp | Kurzbeschreibung |
---|---|---|---|
Stack(In) | Top | INTEGER | Memory in MB (empfohlener Wert ist 40 MB) |
Stack(Out) | Top |
Funktionsaufruf: Call(FreeVirtualMemory)
Verwandtes Thema: CXI_WINDOW_OBJECT::SetMaxMemoryUsage