Вы были со мной, пока не сказали:
, чтобы полностью устранить возможные утечки памяти?
Если вы хотите запустить код в другом домене приложения, есть множество ресурсов, как это сделать, например, Выполнение кода в другом домене приложения (C # и Visual Basic) . Основной принцип заключается в создании класса, который наследуется от MarshalByRefObject
. Затем вы создаете новый домен приложения и поручаете ему создать экземпляр этого объекта - тогда этот объект является вашей «точкой входа» в домен вашего приложения:
AppDomain newAppDomain = AppDomain.CreateDomain("NewApplicationDomain");
ProxyObject proxy = (ProxyObject)newAppDomain.CreateInstanceAndUnwrap("MyAssembly", "MyNamespace.MyProxy");
Однако в C # на самом деле не существует такой вещи, как «утечка памяти», в лучшем случае вы просто имеете объекты, которые непреднамеренно сохраняются в области видимости. Если это так, то домен приложения просто излишний - все, что вам действительно нужно сделать, это удалить ссылки на управляемые объекты, которые больше не нужны, и сборщик мусора свяжет их для вас.
Если у вас есть настоящая утечка памяти в неуправляемом коде, домен приложения вам тоже не поможет. Неуправляемые типы не ограничены доменами приложения, поэтому любая неуправляемая память, выделенная «внутри» домена приложения, не будет освобождена при разрушении домена приложения. В этом случае вам лучше использовать отдельные процессы.