Как освободить ссылку в DCOM сервера, когда клиент разрывает соединение

В среде клиент/сервер, где сервер реализует COM-интерфейс, бывают случаи, когда соединение по какой-либо причине теряется (клиент падает), но экземпляр потока остается активным на сервере, потребляя память до тех пор, пока приложение не будет запущено. завершено . Есть ли способ уничтожить экземпляры, неактивные сервером?

Сервер с использованием TRemoteDataModule и клиент TDComConnection.


person EProgrammerNotFound    schedule 16.04.2013    source источник


Ответы (1)


сборка мусора DCOM делает это автоматически. После трех пропущенных пингов с интервалом в 120 секунд соединение будет очищено.

Так что вам нечего делать. Вы можете сидеть сложа руки и позволить системе делать свою работу.

person David Heffernan    schedule 16.04.2013
comment
Вы уверены, что это работает? Я тестировал сервер и клиент на одной машине, и через 8 минут это не сработало, теперь я тестирую клиент и сервер на разных машинах. Во всех тестовых примерах моделью потока является MTA, который подключается один раз только к одному клиенту и завершает работу с клиентом через taskkill. - person EProgrammerNotFound; 17.04.2013
comment
COM GC — древняя технология, которая, как известно, работает. Возможно, что-то на вашем сервере останавливает его. - person David Heffernan; 17.04.2013
comment
как что? соединение остается активным с базой данных? - person EProgrammerNotFound; 17.04.2013
comment
Я не знаю. Сделайте тривиальный ничего не делающий COM-сервер/клиент. И проверьте, что он там работает. Затем определите, где ваши настройки отличаются. - person David Heffernan; 17.04.2013