У меня есть неуправляемая DLL C ++, которую я использую на C # 2.0 через веб-приложение (IIS6). Чтобы использовать эту DLL, я создал оболочку с помощью утилиты tlbimp
из .Net.
Я хочу, чтобы эта DLL создавалась (создавалась) КАЖДЫЙ раз, когда происходит новый сеанс пользователя. И будет освобожден (утилизирован), когда пользователь выйдет из приложения и закроет браузер.
Проблема, с которой я сталкиваюсь, заключается в том, что теперь, когда первый пользователь подключается к приложению, объект создается, но когда другие пользователи входят в систему, этот же предыдущий объект используется повторно, и когда каждый пользователь отключается от системы. объект не освобождается, пока я не перезапущу IIS.
Я знаю об этом поведении, потому что этот компонент (DLL) вставляет новый реестр в EventLog каждый раз, когда он создается, и каждый раз, когда он удаляется. И в случае, о котором я упоминал, есть только один реестр создания и реестр без удаления, пока я не перезапущу IIS, тогда есть реестр удаления.
Вот код, который я реализовал, чтобы попытаться избавиться от объекта, но, похоже, он не имеет никакого эффекта.
public class ComObject: IDisposable
{
private ComClientClass_objCom;
private bool _isDisposed = false;
public ComObject()
{
_objCom = new ComClientClass();
}
~ComObject()
{
Dispose(false);
}
protected void Dispose(bool disposing)
{
if (disposing)
{
//finalize unmanaged resources
_objCom = null;
}
_isDisposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
GC.Collect();
}
}
Я не знаю, связано ли это поведение с конфигурацией IIS или чем-то другим.
Кто-нибудь может мне объяснить, пожалуйста, почему это происходит? Потому что, насколько я знаю, эта же DLL использовалась со старым ASP, и тогда она работала нормально, поэтому я предполагаю, что это какая-то проблема с GC в .Net.