Αντιμετωπίζω πρόβλημα με μνημη που αυξάνει συνεχώς.
Πώς το εννοώ:
Έχω μια κλάση("Selected3DPointsCollections") που περιέχει 3 Collections.
List<Selected3DPoints> Selected3DPointsList = new List<Selected3DPoints>();
SortedDictionary<int, int> PointSpheresCollection = new SortedDictionary<int, int>(new IRBrain.IntegerKeyComparer());
SortedList<Point, ArrayList> PointToSeedRelations = new SortedList<Point, ArrayList>(new IRBrain.PointComparer());Έχω ένα pubic static instance της κλάσης αυτής.
Η "Selected3DPoints" είναι μια άλλη κλάση.
Η PointToSeedRelations στο ArrayList αποθηκεύει Point.
Για να βοηθήσω την διαίσθησή σας, έχω μια εικόνα(φωτογραφία).
Όταν κάνω κλικ επάνω της, αποθηκεύω στην κλάση αυτή το pixel όπου έκανα click καθώς και τα γειτονικά του.
Ένα αντικείμενο τύπου "Selected3DPoints" για κάθε pixel, μια 2άδα στην PointSpheresCollection και μια 2άδα στην PointToSeedRelations με το ArrayList να περιέχει
τα γειτονικά points του pixel.
Αν κάνω κλικ πατώντας Ctrl προθέτω το νέο Pixel στα Collections,αλλιώς καθαρίζω τα Collections της κλάσης και προσθέτω το νέο Pixel.(Με Ctrl δηλαδή φτοιάχων ομάδες από pixels)
Όπως είπα, αν δεν πατώ Ctrl καθαρίζω τα Collections και αυτό το κάνω έτσι:
for (int i = 0; i < Selected3DPointsList.Count; ++i)
{
Selected3DPointsList[ i ].Dispose();
Selected3DPointsList[ i ] = null;
}
Selected3DPointsList.Clear();
PointSpheresCollection.Clear();
foreach (KeyValuePair<Point, ArrayList> pair in PointToSeedRelations)
{
pair.Value.Clear();
}
PointToSeedRelations.Clear();
GC.Collect();
Παρόλα αυτά παρατηρώ ότι κάθε φορά που κάνω click στην εικόνα η μνημη μου συνεχώς αυξάνει(δεν πατάω Ctrl).
To πρόβλημα θα πρέπει να βρίσκεται στην κλάση που ανέφερα.
Έχω δοκιμάσει ακόμα και να κάνω null το public static instance της και να την ξανάδημιουργήσω αλλά τίποτα.
Τι μπορεί να φταίει?
Επειδή γενικά χρησιμοποιώ πολλά Collections(Κυρίως Generics) υπάρχει κάτι συγκεκριμένο που πρέπει να κάνω για να απελευθερώσω τα αντικείμενα που περιέχουν ή ένα απλό Clear αρκεί?
Ευχαριστώ.