Ciao,
per evitare di far crescere la memoria potresti gestire il Garbage Collector.
Nelle mie applicazioni utilizzo un timer che ogni X secondi esegue il seguente codice:
GC.Collect() 'libero memoria occupata
GC.WaitForPendingFinalizers() 'ma non utilizzata
GC.GetTotalMemory(True) 'dal programma
In questo modo vedrai che la memoria occupata scenderà drasticamente.
Per qunto riguarda il debug ti consiglio di togliere temporaneamente i TRY in modo che al momento del crash vieni indirizzato alla riga di programma che "fa casino".
Spero di essere stato utile, ciao BOC.