Есть у меня AppServer, в виде фасадного объекта (COM+ сервер) и библиотек к нему (COM+). Из этих компонент производится доступ к БД. По ряду причин было сделано, что бы логин юзверя к БД хранился в фасадном объекте — что бы не светить его особо по сети. Т.е. пока у юзверя открыта софтина — инстанс фасадного объекта существует, как юзвер прогу закрыл — фасадный объект уничтожился — в разрез с идеей JIT, но так как в этом оъекте ничего не делается — потери ресурсов незаметные.
Так вот, сейчас пишу Web-интерфейс, и встала такая проблема — я думал что храня fcd (получаю его через Set fcd = CreateObject("bla.bla") ) в Session объекте — я получу тоже что указал в начале постинга. ан нет. Вроде как только сессию будет закрыта — после таймаута — фасадный объект должен уничтожиться. Вроде и таймаут поставил в минутут и abandone делал для проверки — все тщетно... В сессию помещая фасадный объект так:
Только что проверил — сессия закрывается как надо... но когда я делаю Set Session("fcd") = Nothing — объект не уничтожается... почему??? получается ему не делают Release()... или оно где то кешируется, что вернее всего...
Здравствуйте, MentalSky, Вы писали:
MS>Только что проверил — сессия закрывается как надо... но когда я делаю Set Session("fcd") = Nothing — объект не уничтожается... почему??? получается ему не делают Release()... или оно где то кешируется, что вернее всего...
А явно его убить в Session_OnEnd пробовал? В смысле вызвать какой-нибудь Close или что-то в этом духе.
Здравствуйте, MentalSky, Вы писали:
MS>Только что проверил — сессия закрывается как надо... но когда я делаю Set Session("fcd") = Nothing — объект не уничтожается... почему??? получается ему не делают Release()... или оно где то кешируется, что вернее всего...
Если это COM+ объект, то он может просто вернуться в пул
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
DOO>А явно его убить в Session_OnEnd пробовал? В смысле вызвать какой-нибудь Close или что-то в этом духе.
Так я так и делаю через Set Session("fcd") = Nothing
Причием вот что — если я делаю Set Session("fcd") = Nothing в том же участке кода где и создаю объект (при открытии asp-страницы) то все ок... а вот в любом другом месте — не работает. Говорят есть такая проблема и связано это с кешированием.
У меня такая же проблемма.
DOO>>А явно его убить в Session_OnEnd пробовал? DOO>>В смысле вызвать какой-нибудь Close или что-то в этом духе.
Хорошая идея. Если объект не уничтожается — надо попробовать
в Session_OnEnd вызвать что-то типа SelfDestroy и освободить ресурсы.
MS>Говорят есть такая проблема и связано это с кешированием.
Это как-то настраивается? Можно вырубить это чрезмерное кэширование?
Где про это почитать??