Выгрузка библиотеки компонента .NET...
От: Wetnose  
Дата: 14.10.02 11:38
Оценка:
Есть сервер — библиотека классов, написанная на С#.
Есть клиент, который время от времени использует данный сервер.
Клиент постоянно загружен. Сервер ещё находится в разработке, и поэтому библиотеку иногда хочется подменить. Однако, как выясняется, даже, когда компонент не используется библиотека "висит" в памяти и не выгружается, пока не выключить клиента.

Возможно, это как-то связано со сборкой мусора (компонент видимо реально не уничтожается).

Что мне делать? Как освободить библиотеку сервера? Почему сервер сам не выгружается?
Re: Выгрузка библиотеки компонента .NET...
От: Trantor Россия  
Дата: 14.10.02 11:42
Оценка:
Здравствуйте Wetnose, Вы писали:

W>Есть сервер — библиотека классов, написанная на С#.

W>Есть клиент, который время от времени использует данный сервер.
W>Клиент постоянно загружен. Сервер ещё находится в разработке, и поэтому библиотеку иногда хочется подменить. Однако, как выясняется, даже, когда компонент не используется библиотека "висит" в памяти и не выгружается, пока не выключить клиента.

W>Возможно, это как-то связано со сборкой мусора (компонент видимо реально не уничтожается).


W>Что мне делать? Как освободить библиотеку сервера? Почему сервер сам не выгружается?


А как ты подключаешь библиотеку через ремотинг или она у тебя в референс?
... << RSDN@Home 1.0 alpha 11 >>
В жизни мало быть умным, надо еще быть не дураком.
Re[2]: Выгрузка библиотеки компонента .NET...
От: Wetnose  
Дата: 15.10.02 04:00
Оценка:
T>А как ты подключаешь библиотеку через ремотинг или она у тебя в референс?

Я создаю объект из Delphi примерно так:

var S: Variant;
begin
S := CreateOleObject('...');
...
S := Unassigned;
end;

На самом деле, это роли не играет: я пробовал в вызывать
сервер из C++ — тоже самое, сервер не выгружается после
Release().
Re: Выгрузка библиотеки компонента .NET...
От: TK Лес кывт.рф
Дата: 16.10.02 03:57
Оценка:
Здравствуйте Wetnose, Вы писали:

W>Есть сервер — библиотека классов, написанная на С#.

W>Есть клиент, который время от времени использует данный сервер.
W>Клиент постоянно загружен. Сервер ещё находится в разработке, и поэтому библиотеку иногда хочется подменить. Однако, как выясняется, даже, когда компонент не используется библиотека "висит" в памяти и не выгружается, пока не выключить клиента.

W>Возможно, это как-то связано со сборкой мусора (компонент видимо реально не уничтожается).


W>Что мне делать? Как освободить библиотеку сервера? Почему сервер сам не выгружается?


В .NET нет индивидуальной выгрузки сборок. Это можно сделать только с выгрузкой всего домена.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Выгрузка библиотеки компонента .NET...
От: Wetnose  
Дата: 16.10.02 05:20
Оценка:
TK>В .NET нет индивидуальной выгрузки сборок. Это можно сделать только с выгрузкой всего домена.

А как принудительно выгрузить домен? Или я чего-то не понимаю?
Re[3]: Выгрузка библиотеки компонента .NET...
От: TK Лес кывт.рф
Дата: 16.10.02 06:49
Оценка:
Здравствуйте Wetnose, Вы писали:

TK>>В .NET нет индивидуальной выгрузки сборок. Это можно сделать только с выгрузкой всего домена.


W>А как принудительно выгрузить домен? Или я чего-то не понимаю?


AppDomain.Unload
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: Выгрузка библиотеки компонента .NET...
От: Wetnose  
Дата: 16.10.02 09:09
Оценка:
TK>>>В .NET нет индивидуальной выгрузки сборок. Это можно сделать только с выгрузкой всего домена.

W>>А как принудительно выгрузить домен? Или я чего-то не понимаю?


TK>AppDomain.Unload


Я наверное туплю, но всё же...
В какой момент и где необходимо вызвать данный метод?
Re[5]: Выгрузка библиотеки компонента .NET...
От: TK Лес кывт.рф
Дата: 16.10.02 09:13
Оценка:
Здравствуйте Wetnose, Вы писали:

TK>>>>В .NET нет индивидуальной выгрузки сборок. Это можно сделать только с выгрузкой всего домена.


W>>>А как принудительно выгрузить домен? Или я чего-то не понимаю?


TK>>AppDomain.Unload


W>Я наверное туплю, но всё же...

W>В какой момент и где необходимо вызвать данный метод?

Алгоритм примерно такой:

1. Создаем новый домен
2. Грузим в него необходимую сборку.
3. Используем там нужные классы
4. выгружаем домен.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[6]: Выгрузка библиотеки компонента .NET...
От: Wetnose  
Дата: 16.10.02 09:23
Оценка:
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 остаётся "висеть"
Re[7]: Выгрузка библиотеки компонента .NET...
От: Newbie  
Дата: 17.10.02 18:51
Оценка:
Здравствуйте 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 с логикой можно будет вышрузить. А кому сейчас легко?
MCP.NET
Re[8]: Выгрузка библиотеки компонента .NET...
От: DOT  
Дата: 21.10.02 10:57
Оценка:
попробуй UnloadFreeLibraries из WinAPI
Re[9]: Выгрузка библиотеки компонента .NET...
От: Wetnose  
Дата: 21.10.02 11:10
Оценка:
DOT>попробуй UnloadFreeLibraries из WinAPI

Пробовал — не помогает
Re[9]: Выгрузка библиотеки компонента .NET...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 21.10.02 12:41
Оценка:
Здравствуйте DOT, Вы писали:

DOT>попробуй UnloadFreeLibraries из WinAPI


При чем здесь? Либы дотнета это не dll'ки. Где то в MSDN черным по по белому сказано что выгрузить отдельную либу нельзя.
... << RSDN@Home 1.0 alpha 12 (developer build)>>
AVK Blog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.