Wenn es noch irgendwo eine Referenz auf dieses Array gibt, wird der Speicher nie freigegeben.
Also suche, wo es noch Referenzen gibt und sorge dafür, dass die nicht erhalten bleiben, wenn aufgeräumt werden soll.
Events sind da ein beliebter Fehler, denn die sorgen zwangsläufig dazu, dass deine Instanz (die wiederum das Array hat) bei der Instanz, die das Event pflegt, referenziert bleibt.
Zitat: |
Auch nach Beenden der Klasse und Dispose bleibt der Speicher durch das Array belegt |
Eine Klasse kann nicht "beendet" werden. Solange noch Referenzen existieren, räumt der GC nicht auf, völlig egal, was Du in deinem Dispose (was ja auch nur eine dumme Methode ist) tust.
Du könntest im Dispose die Variable mit dem Array auf null setzen, das funktioniert aber nur, wenn es keine weiteren Referenzen gibt. Außerdem ist das vermutlich noch nicht das eigentliche Problem, denn irgendetwas hält eine Referenz auf das Objekt, wo das Array drin ist und diese Stelle musst Du finden.
Zitat: |
Welche Möglichkeiten gibt es den Speichern freizugeben ? |
Alle Referenzen entfernen, danach räumt der GC von alleine auf.
Wenn der GC nicht aufräumt, gibt's noch Referenzen.
PS:
Und Th69 hat natürlich Recht: Es kann alles noch an der ListView hängen, dann hast Du damit auch eine Referenz, die Du aufräumen musst.
Da sollte es aber reichen, die Liste mit den ListItems zu leeren und/oder die DataSource auf null zu setzen.