Что является методами для уничтожения объектов Excel COM Interop в C# помимо них:
object_instance = null;
System.GC.collect();
&
System.Runtime.InteropServices.Marshal.ReleaseComObject(object);
Предложите только встроенные методы, не другие инструменты как bigcannon, и т.д.
Проблема в том, что если вы не отбросили все ссылки на объект, даже GC.Collect не уничтожит его.
Правило C # (или .NET в целом) состоит в том, что вы не можете уничтожить объект. Dispose () этого не сделает. Финализатор этого не сделает (правило номер 2: не используйте финализатор, если вы не знаете, зачем он вам нужен, и никогда не вызывайте его напрямую).
Для .NET это то, что вам нужно сделать:
Если ваш объект выделяет значительные ресурсы, лучше всего реализовать IDisposable и явно вызвать Dispose. Если по какой-то причине вы не можете вызвать Dispose и ваш класс резервирует неуправляемую память, вы можете использовать GC.AddMemoryPressure (с соответствующим GC.RemoveMemoryPressure в финализаторе), чтобы сообщить GC, что ваш класс тяжелее, чем кажется, отдавая ему приоритет для более раннего уборка.
Если вам действительно нужно явно освободить память, занимаемую объектом, и вы уверены, что вы выберете момент для его уничтожения лучше, чем GC, то единственный разумный вариант - выделить его на стеке и позволить ему умереть, когда вы вернетесь из метода, где он был выделен.
Если вам нужен контроль, позволяющий управлять ресурсами объекта, реализуйте интерфейс IDisposable.
http://msdn.microsoft.com/en-us/library/system.idisposable.aspx
Если ресурсы не являются причиной, по которой вы хотите явно контролировать уничтожение объекта, я не могу понять, почему вы хотите этот уровень контроля ... Используете ли вы объединение объектов?
Сборщик мусора - единственный механизм, который может уничтожить управляемый объект , но обычно вы не вызываете его явно. Вы просто позволяете ему делать свое дело.
Точно так же, как вы никогда не выносите свой собственный мусор на склад, вы просто оставляете его на углу. Это всегда ответственность мусорщика.
Вы можете освобождать ссылки на вещи и очищать их с помощью IDisposable, финализаторов и деструкторов, но не уничтожать их.
Используя System.GC, вы можете попросить мусорщика сделать что-то пораньше - запросить индивидуальный запуск только для себя - но это обычно портит его график, и ему приходится иметь дело с гораздо большим мусором, чем ваш, так что это не так. рекомендуемые.
По большей части вам необходимо удалить все ссылки на объект. Только тогда сборщик мусора увидит его и уничтожит.
Имейте в виду:
object_instance = null;
Все это уничтожает ссылку object_instance. Это работает, если это единственная ссылка. Если есть другие ссылки, то они не собираются.
var skywalker = new Person();
var object_instance = skywalker;
...
object_instance = null;
//It's still alive and won't be collected because skywalker lives...