|
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
|
|
Намекнуть GarbageCollector, что ресурс я удалю сам или можно его удалять только после выполнения деструктора22.12.2011, 20:07. Показов 1524. Ответов 11
Метки нет (Все метки)
Доброго времени суток, форумчане!
Возникла проблема с последовательностью выполнения деструкторов у объекта класса. В деструкторе класса необходимо выполнить ряд действий связанный с использованием членов этого класса (UdpSocket, System.Timers.Timer). Но к моменту вызова этого самого деструктора сборщиком мусора сокет уже закрыт, а таймер прибит. В настоящий момент я просто написал заплатку в виде локального сокета и такого же таймера. Но хотелось бы сделать по человечески... Отсюда вопрос: как намекнуть GarbageCollector, что ресурс я удалю сам или можно его удалять только после выполнения деструктора? GC.KeepAlive - не тот случай, GC.SuppressFinalize, вызванный ещё при конструировании - не помогает.
0
|
|
| 22.12.2011, 20:07 | |
|
Ответы с готовыми решениями:
11
Ребята Можно и похожую скинуть, что бы сам сделал или ссылкой на ресурс, где понятно показано, как делать Каталог в ресурс или что можно придумать Можно ли удалять одинаковый софт только разного года (оставлять тот что поновее) ? |
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||||||||||
| 22.12.2011, 23:19 | ||||||||||||||
|
То есть память, используемая объектом, всегда освобождается после выполнения деструктора.
Полностью паттерн при этом выглядит так:
0
|
||||||||||||||
|
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
|
|
| 22.12.2011, 23:53 [ТС] | |
|
Проблема в том, что в момент вызова деструктора, сокет уже закрыт, а не в том, чтобы его удалить. А сокет нужен открытым для правильного выполнения деструктора.
Добавлено через 1 минуту А насчёт хорошего тона относительно использования интерфейса IDisposable - полностью согласен
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 22.12.2011, 23:55 | ||
|
Или я чего-то не понимаю?
0
|
||
|
Кодило
251 / 179 / 23
Регистрация: 25.11.2009
Сообщений: 685
|
|
| 23.12.2011, 00:37 | |
|
kolorotur, я так понимаю, что проблема в том, что при вызове GC он сначала закрывает сокет и таймер, а потом вызывает деструктор, в котором нужны как раз сокет и таймер.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 23.12.2011, 01:49 | ||
|
0
|
||
|
72 / 17 / 2
Регистрация: 29.12.2010
Сообщений: 339
|
|
| 23.12.2011, 03:58 | |
|
По моим сведениям можно было отключить GarbageCollector и всё dispose вручную
0
|
|
|
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
|
|||
| 23.12.2011, 10:57 [ТС] | |||
|
Так удаляется объект: сначала удаляются все его переменные, потом вызывается его деструктор, потом переходим к базовому классу
0
|
|||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||
| 23.12.2011, 16:48 | ||||
|
0
|
||||
|
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
|
|
| 24.12.2011, 10:16 [ТС] | |
|
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 24.12.2011, 16:59 | ||
|
Что именно вы пытаетесь сделать с таймером и сокетом в деструкторе вашего класса? Для чего вам нужно, чтобы они на этот момент были не уничтожены?
0
|
||
|
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
|
|
| 24.12.2011, 17:43 [ТС] | |
|
Собственно, проблемы то я уже избежал: написал небольшую заплатку, повторяющую код класса, но на локальных переменных: таймере и сокете.
А нужны они вот для чего: класс является "драйвером" контроллера, связанного с компьютером по Ethernet. При ликвидации класса железке надо сообщить об этом, убедиться что железка в курсе, выдержав таймаут, только потом закрыть сокет и таймер. Вот и кажется мне, что некрасиво писать отдельный код и грузить комп повторением действий
0
|
|
| 24.12.2011, 17:43 | |
|
Помогаю со студенческими работами здесь
12
[Gentoo] Иксы: что с ними делать? удалять или можно еще наладить?
Два класса, два деструктора. После срабатывания второго первому нечего удалять
группа или ресурс не находятся в нужном состании для выполнения требуемой опирации Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|