salve,
ho scritto un codicillo che per esigenze fa partire un thread, all'interno di questo thread vengono create delle variabili e delle connessioni con outlook tramite l'interop.
Il tool rimane acceso 24/7 e fa polling su una casella mail pubblica trappando mittente e argomento, se questi soddisfano alcune condizioni vengono trattate inserendo i vari dati in un DB MySql.
A valle della trattazione provvedo a mettere tutte le stringhe a null e a fare il dispose degli oggetti disposable, ed in fondo al codice mi è stato suggerito di aggiungere
codice:
System.Runtime.InteropServices.Marshal.ReleaseComObject(Mitem);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(Mitem);
Naturalmente Mitem è il mio oggetto MAIL dell'interop e mi è stato suggerito di aggiungere una forzatura al GarbageCollection che per farla eseguire ogni 10 mail ho pensato di fare così:
codice:
if (nummail==10)
{
nummail=0;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
nummail++
Procedura comunque ripetuta a valle delfinally
Ho notato che comunque il programma tende a crescere in memoria anche se di pochi K per volta.
Ho alcune domande a questo punto:
1) Se faccio il .dispose(); è necessario anche fare = null; ?
2) Se si in che ordine?
3) So che il GC non andrebbe forzato ma il tool "mangia" molta più memoria senza, come posso ovviare?
4) Il marshalling cosa fa di preciso?
grazie in anticipo per le risposte!!