Что вы хотите сделать, это позвонить по номеру GC.SuppressFinalize()
, если вы сами выполняете очистку ... Обычно вы используете GC.SuppressFinalize()
в классе IDisposable
. См. Этот пример кода для общего использования IDisposable
:
http://msdn.microsoft.com/en-us/library/system.gc.suppressfinalize.aspx
Если вам действительно нужно собрать мусор прямо сейчас:
var myObj = new MyObject();
// This object will be cleaned up by the Dispose method.
// Therefore, you should call GC.SupressFinalize to
// take this object off the finalization queue
// and prevent finalization code for this object
// from executing a second time.
GC.SuppressFinalize(myObj);
Но я предупреждаю вас, что вы действительно должны позволить объекту выйти из области видимости и позволить GC собирать объекты естественным образом. Среда выполнения .NET очень эффективна для управления памятью, если вы не пытаетесь ее выполнять.
EDIT
После просмотра комментариев я вижу, что вы забыли оставить важную часть информации, поскольку вы связывали рассматриваемый объект с другими методами объектов. Это означает, что объект, который вы пытаетесь завершить, не будет завершен до тех пор, пока не будет завершен метод, используемый для наблюдения за событием, таким образом сохраняя в памяти около тонны дополнительных объектов.
Что вы можете сделать, чтобы разорвать эту сильную ссылку, это использовать объект с именем WeakReference
. Или используйте лямбды, чтобы сломать сильные ссылки.
См. Пример использования WeakReference.
http://msdn.microsoft.com/en-us/library/system.weakreference.aspx
Или вы можете сделать что-то вроде этого:
dym.cas += (x, y, z) => gameTime.ElapsedGameTime(x,y,z);
вместо
dym.cas += gameTime.ElapsedGameTime;