Есть сервер — библиотека классов, написанная на С#.
Есть клиент, который время от времени использует данный сервер.
Клиент постоянно загружен. Сервер ещё находится в разработке, и поэтому библиотеку иногда хочется подменить. Однако, как выясняется, даже, когда компонент не используется библиотека "висит" в памяти и не выгружается, пока не выключить клиента.
Возможно, это как-то связано со сборкой мусора (компонент видимо реально не уничтожается).
Что мне делать? Как освободить библиотеку сервера? Почему сервер сам не выгружается?
Здравствуйте Wetnose, Вы писали:
W>Есть сервер — библиотека классов, написанная на С#. W>Есть клиент, который время от времени использует данный сервер. W>Клиент постоянно загружен. Сервер ещё находится в разработке, и поэтому библиотеку иногда хочется подменить. Однако, как выясняется, даже, когда компонент не используется библиотека "висит" в памяти и не выгружается, пока не выключить клиента.
W>Возможно, это как-то связано со сборкой мусора (компонент видимо реально не уничтожается).
W>Что мне делать? Как освободить библиотеку сервера? Почему сервер сам не выгружается?
А как ты подключаешь библиотеку через ремотинг или она у тебя в референс?
... << RSDN@Home 1.0 alpha 11 >>
В жизни мало быть умным, надо еще быть не дураком.
Здравствуйте Wetnose, Вы писали:
W>Есть сервер — библиотека классов, написанная на С#. W>Есть клиент, который время от времени использует данный сервер. W>Клиент постоянно загружен. Сервер ещё находится в разработке, и поэтому библиотеку иногда хочется подменить. Однако, как выясняется, даже, когда компонент не используется библиотека "висит" в памяти и не выгружается, пока не выключить клиента.
W>Возможно, это как-то связано со сборкой мусора (компонент видимо реально не уничтожается).
W>Что мне делать? Как освободить библиотеку сервера? Почему сервер сам не выгружается?
В .NET нет индивидуальной выгрузки сборок. Это можно сделать только с выгрузкой всего домена.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте Wetnose, Вы писали:
TK>>В .NET нет индивидуальной выгрузки сборок. Это можно сделать только с выгрузкой всего домена.
W>А как принудительно выгрузить домен? Или я чего-то не понимаю?
AppDomain.Unload
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
TK>>>В .NET нет индивидуальной выгрузки сборок. Это можно сделать только с выгрузкой всего домена.
W>>А как принудительно выгрузить домен? Или я чего-то не понимаю?
TK>AppDomain.Unload
Я наверное туплю, но всё же...
В какой момент и где необходимо вызвать данный метод?
Здравствуйте Wetnose, Вы писали:
TK>>>>В .NET нет индивидуальной выгрузки сборок. Это можно сделать только с выгрузкой всего домена.
W>>>А как принудительно выгрузить домен? Или я чего-то не понимаю?
TK>>AppDomain.Unload
W>Я наверное туплю, но всё же... W>В какой момент и где необходимо вызвать данный метод?
Алгоритм примерно такой:
1. Создаем новый домен
2. Грузим в него необходимую сборку.
3. Используем там нужные классы
4. выгружаем домен.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
TK>>>AppDomain.Unload
W>>Я наверное туплю, но всё же... W>>В какой момент и где необходимо вызвать данный метод?
TK>Алгоритм примерно такой:
TK>1. Создаем новый домен TK>2. Грузим в него необходимую сборку. TK>3. Используем там нужные классы TK>4. выгружаем домен.
ОК. Но как это всё проделать, напрмер, из Delphi?
Пока делаю так:
var Server: Variant;
...
Server := CreateOleObject('Wetnose.MyClass');
// библиотека загружена ...
...
Server := Unassigned;
// объект освобождён
// сервер на базе exe-шника выгрузился бы...
// dll остаётся "висеть"
Здравствуйте Wetnose, Вы писали:
TK>>>>AppDomain.Unload
W>>>Я наверное туплю, но всё же... W>>>В какой момент и где необходимо вызвать данный метод?
TK>>Алгоритм примерно такой:
TK>>1. Создаем новый домен TK>>2. Грузим в него необходимую сборку. TK>>3. Используем там нужные классы TK>>4. выгружаем домен.
W>ОК. Но как это всё проделать, напрмер, из Delphi?
Создай 2 сборки — Controller (c методами CreateServer (пункты 1,2) и UnloadServerAssebmly(пункт 4)) и Server. Всю доменно-load/unload логику свези в Controller. Он будет висеть, но собственно DLL с логикой можно будет вышрузить. А кому сейчас легко?