To prevent .NET memory leaks:
1) Employ the 'using' construct (or 'try-finally construct) whenever an object with 'IDisposable' interface is created.
2) Make classes 'IDisposable' if they create a thread or they add an object to a static or long lived collection. Remember a C# 'event' is a collection.
Here is a short article on Tips to Prevent Memory Leaks.