Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
844to848
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
844to848
844to848
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Objekte freigeben - Zeitdauer

Objekte freigeben - Zeitdauer
19.02.2007 15:09:21
Stefan
Hallo VBA-Experten,
ich habe zwei Klassen definiert: die eine enthält eine Collection der Instanzen der zweiten Klasse.
Im Makro greife ich auf eine Instanz der ersten Klasse zu, dort werden ca. 10.000 Instanzen der zweiten Klasse als collection angelegt.
Wenn ich jetzt am Ende des Makros bin, gebe ich die Instanz der ersten Klasse wieder frei. Diese Freigabe dauert sehr lange. Das Weglassen der Freigabe oder das Löschen der Collection bringt auch keinen Zeitgewinn.
Wer weiß Rat?
Gruß
Stefan Krähe.

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Objekte freigeben - Zeitdauer
19.02.2007 16:12:00
Nepumuk
Hallo Stefan,
schon mal versucht, an Stelle einer Collection ein Array der Klasse zu benutzen? Ich kann aber nicht sagen, ob das schneller ist, denn so vielen Instanzen einer Klasse habe ich noch nie benötigt.
Gruß
Nepumuk
AW: Objekte freigeben - Zeitdauer
19.02.2007 16:25:00
Stefan
Hallo Nepumuk,
Arrays haben den Nachteil, dass sie
1) keine Objekte enthalten können (man müsste also die Eigenschaften meiner Collection-Elemente als erste Dimension und jedes Element als zweite Dimension anlegen).
2) Die Veränderung der Anzahl ist nur mit Redim Preserve möglich. Das ist langwierig.
3) Eine Indexierung ist nicht möglich. Ich müsste also für jede Zeile das Array durchlaufen.
Sind meine Überlegungen korrekt?
Gruß
Stefan.
Anzeige
AW: Objekte freigeben - Zeitdauer
19.02.2007 16:40:44
Nepumuk
Hallo Stefan,
1. Du kannst ein Array einer Klasse erstellen. Private objClass() as clsClass (So was benutze ich häufig für Controls).
2. Redim Preseve ist auf alle Fälle schneller als Collection.Add.
3. Da hast du Recht, da müsste man ein eigenes Indexarray mitlaufen lassen.
Das Problem ist die Collection. die ist einfach nicht sehr schnell. Hast du es mit Set MyCollection = Nothing versucht?
Ansonsten könntest du mal ein Dictionary-Objekt versuchen, vielleicht ist das schnelle als eine Collection.
Gruß
Nepumuk
AW: Objekte freigeben - Zeitdauer
19.02.2007 16:52:21
Stefan
Hallo Nepumuk,
Vielen Dank für die Antwort.
1) Das mit dem Array einer Klasse werde ich ausprobieren.
2) Redim Preserve könnte ich schneller machen, wenn ich in der Add-Funktion intern die Matrix um 100 Sätze erweitere, wenn diese an Ihr Limit gelangt. Ich muss dann bloß einen Status "aktiv/inaktiv" mitführen.
3) Meinst Du ein IndexArray mitlaufen lassen oder eine Collection mit den Schlüsseln? Wie soll das mit dem IndexArray funktionieren?
In der Tat ist die Collection das Problem. Ich habe es auch mit Set ... versucht, der Zeitaufwand bleibt. Das Anlegen dauert 15 Sekunden. Auf meinem Rechner fährt der benötigte Arbeitsspeicher hoch. Beim Beenden - egal wie - braucht der Rechner 10 Minuten, um den Arbeitsspeicher wieder freizugeben. Einzige schnellere Lösung ist Task beenden.
Ich versuche es morgen mal mit dem Array und werde berichten.
Anzeige
AW: Objekte freigeben - Zeitdauer
19.02.2007 17:05:00
Nepumuk
Hallo Stefan,
das Indexarray als Collection, in der du über den Key auf den Index des Klassenarrays zugreifst.
Ich würde es aber wirklich mal mit einem Dictionary - Objekt versuchen. Das ist wie eine Collection, bietet aber zusätzliche Eigenschaften und Methoden.
Gruß
Nepumuk
AW: Objekte freigeben - Zeitdauer
20.02.2007 19:55:38
Stefan
Hallo Nepumuk,
hier die Erkenntnisse meines heutigen Tages:
1) Statt der Collection ein Array spart Hauptspeicher (ca. 20%).
2) Beim Beenden des Scriptes wird der Hauptspeicher langsam geleert und DAS dauert...
3) Beim ersten, zweiten, dritten Makrostart geht das mit der Zeit, jedoch wird es dann deutlich länger. Ab dem 20.mal bleibt die Zeit konstant.
4) Manchmal hilft es, Excel zu beenden und neu zu Öffnen.
Gruß Stefan.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige