Καταρχάς καλημέρα σε όλους,
είναι η πρώτη φορά που γράφω, (ναι, διάβασα πρώτα) και θα ήθελα να με βοηθήσετε σε ορισμένα προβληματάκια...
Επί της ουσίας:
Α) Συντάσσω κάποιες κλάσεις σε VB.NET (επεξεργασία χωρικών δεδομένων), οι οποίες δουλεύουν άψογα αλλά... δεν φεύγουν ποτέ από τη μνήμη.
Ως αποτέλεσμα όταν π.χ. προσπαθώ να επεξεργαστώ* ένα collection από 800.000 στιγμιότυπα μιας κλάσης, η μνήμη διαρκώς αυξάνει ώσπου, το γνωστό exception!
Υπάρχει ένα αντιληπτό πρόβλημα με τα references. Πιθανώς να μην τα συμμαζεύει ο GC διότι διατηρούν references στη μνήμη.
ΟΜΩΣ περνώντας ένα x στιγμιότυπο σε μια ρουτίνα ως όρισμα, όπως και αν δηλωθεί, χρησιμοποιείται byRef και όχι byVal και οι τιμές τους είναι δυστυχώς αλλοιώσιμες. Η έξοδος από τη ρουτίνα δεν τα καθαρίζει. Δοκίμασα να τα "αντιγράφω" όπου χρειάζεται με χρήση του Interface Icloneable, αυτό όμως έχει ως συνέπεια το επιπλέον "φούσκωμα" της μνήμης και τον ερχομό του γλυκύτατου exception μια ώρα αρχύτερα.
Πως μπορώ να "περιορίσω" τα περιττά στιγμιότυπα κλάσεων; Πως μπορώ να καθαρίσω τις local δηλώσεις; Υποτίθεται ότι μη χρησιμοποιώντας unmanaged resources δεν θα ήταν αναγκαία η χρήση του Dispose. Ωστόσο, δοκιμάστηκε, απέτυχε, αφαιρέθηκε.
Β) Ως συνέχεια του παραπάνω, όταν τελικώς λαμβάνω τα αποτελέσματα μέσα στην εφαρμογή μου, (και είναι μετρημένα και "ζυγισμένα") γιατί η κατανάλωση μνήμης δεν πέφτει; Είναι σαν να κουβαλάω το σύνολο των κλάσεων επί x στιγμιότυπα. Η δε αποθήκευση ενός collection δεδομένων με serialization φουσκώνει επιπλέον τη μνήμη και υποβαθμίζει απείρως την ταχύτητα.
Μη δουλεύοντας μόνο με ένα τύπο αντικειμένων αλλά με πολλά εμπλεκόμενα λόγω της δομής τους, δεν μπόρεσα να χρησιμοποιήσω το Using και δεν ξέρω καν αν θα βοηθούσε. (Στην αποθήκευση ΔΕΝ βοηθάει). Προερχόμενος δε από το χώρο του Visual Studio 6 μου φαίνονται "περίεργα" όλα αυτά. Δεν είχα ποτέ πρόβλημα διαχείρισης μνήμης παλαιότερα.
* η επεξεργασία συνεπάγεται τη δημιουργία πολλών νέων στιγμιοτύπων, συνόλων αυτών ως υποσύνολα άλλων κλάσεων, αντικατάσταση και επιστροφή γενικότερων τύπων.
Συγνώμη αν σας κούρασα, ευελπιστώ στην όποια βοήθεια.