|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
gr_vlskyANA, Счас рассматриваю вариант : В одном процессе можно запустить несколько доменов приложений с таким же уровнем изоляции, какой обеспечивают отдельные процессы, но без дополнительных издержек на межпроцессные вызовы или переключение между процессами. Выполнение разных версий пользовательских задач осуществляется в разных доменах приложения. Домен, содержащий сборку с более ненужной версией пользовательского таска, можно выгрузить без остановки всего приложения. Как вам такой вариант? ктото пытался чтото подобное использовать??? ГригорийНа прошлой работе подобное использовали. Для обновления своих отчётов в 3rd party приложении без остановки последнего. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 17:29 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
А может сделать так: наступает время для выполнения скопа задач, этот скоп грузится в отдельный домен и там выполняется, как все задачи выполнены, или прерваны, домен выгружается. Новые задачи и изменения относятся к другому скопу и грузятся в другой домен. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 17:33 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
skyANAА может сделать так: наступает время для выполнения скопа задач, этот скоп грузится в отдельный домен и там выполняется, как все задачи выполнены, или прерваны, домен выгружается. Новые задачи и изменения относятся к другому скопу и грузятся в другой домен.скайана, это не работает. Представь, что у тебя есть два типа задач: - одна выполняется раз в час и работает 10 минут - другая выполняется раз в два часа, и может работать до недели (ждать чего-либо). Как ты будешь определять границы этого "скопа"? Как ты будешь поступать со второй задачей? Ты за сутки загрузишь 12 доменов, которые буду висеть неделю. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 17:38 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
cdtyjvskyANAА может сделать так: наступает время для выполнения скопа задач, этот скоп грузится в отдельный домен и там выполняется, как все задачи выполнены, или прерваны, домен выгружается. Новые задачи и изменения относятся к другому скопу и грузятся в другой домен.скайана, это не работает. Представь, что у тебя есть два типа задач: - одна выполняется раз в час и работает 10 минут - другая выполняется раз в два часа, и может работать до недели (ждать чего-либо). Как ты будешь определять границы этого "скопа"? Как ты будешь поступать со второй задачей? Ты за сутки загрузишь 12 доменов, которые буду висеть неделю.А вариант с одним доменом под одну задачу значит "нормальный вариант в принципе". Свеном, ты не последователен в своих рассуждениях :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 17:41 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
А, я понял. Ты намекаешь на то, что не надо выгружать домен по завершению работы всех задач, надо выгружать по другому принципу? Согласен. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 17:51 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
skyANAА, я понял. Ты намекаешь на то, что не надо выгружать домен по завершению работы всех задач, надо выгружать по другому принципу? Согласен.Ну что-то вроде того. Например, у меня есть связанный список доменов - от наиболее старого до наиболее свежего. Когда мне приходит новая задача, я по ее версии проверяю самый "свежий домен". Если он не содержит ассембли этой задачи, или содержит, но версии совпадают - я запендюриваю это задачу в этот домен. В противном случае я создаю новый домен, а загружаю эту задачу туда. Таким образом у нас всегда будет некий "наиболее актуальный" домен, в котором крутят последние версии всех задач, и хвост из "старых" доменов, в которых дорабатывают задачи более древних версий. Ну и в каждом домене поддерживаем какой-нибудь статический счетчик текущих задач и флажок "obsolete", который означает, что него больше не придет ни одна задача. Когда счетчик задач обнуляется и obsolete=true, домен можно выгружать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 18:12 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
cdtyjvskyANAА, я понял. Ты намекаешь на то, что не надо выгружать домен по завершению работы всех задач, надо выгружать по другому принципу? Согласен.Ну что-то вроде того. Например, у меня есть связанный список доменов - от наиболее старого до наиболее свежего. Когда мне приходит новая задача, я по ее версии проверяю самый "свежий домен". Если он не содержит ассембли этой задачи, или содержит, но версии совпадают - я запендюриваю это задачу в этот домен. В противном случае я создаю новый домен, а загружаю эту задачу туда. Таким образом у нас всегда будет некий "наиболее актуальный" домен, в котором крутят последние версии всех задач, и хвост из "старых" доменов, в которых дорабатывают задачи более древних версий. Ну и в каждом домене поддерживаем какой-нибудь статический счетчик текущих задач и флажок "obsolete", который означает, что него больше не придет ни одна задача. Когда счетчик задач обнуляется и obsolete=true, домен можно выгружать. Скажите, а зачем все это нужно, если уже есть готовый WWF? Ведь объем работы для реализации вышеперечисленного + тестирование будет значительным. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 18:16 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
Arm79Скажите, а зачем все это нужно, если уже есть готовый WWF? Ведь объем работы для реализации вышеперечисленного + тестирование будет значительным.У ТС уже есть работающее решение, в котором WWF нет. Ему надо просто добавить фичу - что бы при обновлении таска старые не обрывались. Описанное мною решение - это где-то в районе 100 строчек кода. Трудоемкость - порядка 1 дня работы. Ваше предложение перейти на WWF заведомо потребует больше трудозатрат. Если бы ТС писал что-то с нуля - не вопрос, WWF надо было рассматривать в первую очередь. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 18:35 |
|
Перекомпиляция dll без выгрузки AppDomain
|
|||
---|---|---|---|
#18+
cdtyjv, Спасибо примерно к такому же выводу я пришел. Радует что подобное реализовано и проверенно в условиях эксплуатации. Особая благодарность за высказывания по теме вопроса, а не лишь бы что-то написать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 21:42 |
|
|
start [/forum/topic.php?fid=20&msg=38784659&tid=1402328]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 131ms |
0 / 0 |