| |
|
|
Sebastian Sprenger | Wenn ich ein Objekt mit Dispose freigebe und noch ein Objekt in dieselbe Variable erzeuge, bekomme ich unter XProfan10Free und 11 den Fehler Zuweisung auf dieses Objekt nicht möglich . Wenn ich zusätzlich zu oder statt dem Dispose einen Bereich mit 0 Bytes dimensioniere, tuts! Wieso aber nicht bei Dispose ? KompilierenMarkierenSeparierenDesweiteren hab ich den Eindruck, dass Objekte in Arrays gar nicht dispose d werden... Zum Vergleich: Bei diesem Code ohne Arrays kommt ja das scheinbar richtige raus: KompilierenMarkierenSeparierenAber hier...!? (Man beachte, dass auch hier das Neuzuweisungsproblem (s.o.) besteht, der Befehl Dim aber wohl keine Arrays erwartet...) KompilierenMarkierenSeparierenGruß, Sebastian |
|
|
| Profan² 7.0e, XProfan 9, 11.2a, FreeProfan32 Windows Vista Home Premium 32-Bit, 2.8 Ghz, 4 GB RAM Windows Me, 1.8 Ghz, 256 MB RAM | 11.10.2008 ▲ |
|
|
|
|
RGH | Hallo,
einzelne Arrayelemente können nicht disposed werden, sondern nur das komplette Array:
Dispose Objekte#[] Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 11.10.2008 ▲ |
|
|
|
|
Sebastian Sprenger | Einzelne nicht? OK... Aber auch wenn ich alle auf einmal dispose, passiert nichts: KompilierenMarkierenSeparierenWird der Speicher denn da jemals wieder freigegeben? |
|
|
| Profan² 7.0e, XProfan 9, 11.2a, FreeProfan32 Windows Vista Home Premium 32-Bit, 2.8 Ghz, 4 GB RAM Windows Me, 1.8 Ghz, 256 MB RAM | 11.10.2008 ▲ |
|
|
|
|
Nico Madysa | Jetzt hast du wieder vergessen, das Array mit Dim zu dimensionieren. Prinzipiell sollte es so klappen: KompilierenMarkierenSeparieren Am besten ist es, wenn du im selben Atemzuge, in dem du Dim schreibst, auch das zugehörige Dispose ans Ende klatschst,
PS: In älteren Windows-Versionen konnte es tatsächlich passieren, dass der Speicherplatz nichtfreigegebener Bereiche auch blockiert bleibt. Aber ab WIndows XP sollte spätestens bei End der letzte Bereich automatisch freigegeben werden. |
|
|
| |
|
|
|
RGH | @Nico: Sebastian macht es schon richtig: Beii einem Objekt- oder Struktur-Array kann man jedem einzelnen Element eine Klasse bzw. eine Struktur zuweisen, sogar jedem Element eine andere.
@Stefan: Du hast recht. Offensichtlich wirkt auch hier DPSPOSE nicht zuverlässig. Ich werde es mir mal näher ansehen ...
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 13.10.2008 ▲ |
|
|
|
|
Nico Madysa | Asche auf mien Haupt, ich hab das "New" glatt übersehen... |
|
|
| |
|
|
|
RGH | Ok, ich habe in der Mittagspause noch mal genauer nachgesehen:
1. Das zuerst genannte Problem (ohne Bereisarray) betrifft nur die NEW-Funktion: Sie funktioniert tatsächlich nach einem Dispose bei Objekten nicht. Das Dispose wurde aber korrekt durchgeführt und der Speicher freigegeben. Workaround: Möglichkeit 1: Statt Dispose in diesem Fall "dim objekt#,0" benutzen. Ein Dispose ist dann nicht notwendig. Möglichkeit 2: Die Klasse mit Dim zuweisen "Dim objekt#, KLASSE".
2. Das Disposen von Bereichsarrays funktioniert tatsächlich nicht. Workaround: Ein Bereichsarray nicht mehrfach verwenden. Beim Programmende wird der Speicher freigegeben.
Beide Bugs werden in der nächsten Version behoben.
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 13.10.2008 ▲ |
|
|
|
|
RGH | ... und ich setze noch einen drauf:
Ab der nächsten Version (möglicherweise 11.1) wird es auch möglich sein, ein einzelnes Element eines Bereichs-, Struktur- oder Objekt-Arrays zu disposen:
Dispose Objekte[5] Diesem Element kann dann mit New wieder eine Klasse oder Struktur zugewiesen werden.
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 14.10.2008 ▲ |
|
|
|