Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
-4 / 5 / 1
Регистрация: 06.01.2014
Сообщений: 67

Время жизни/исполнения деструктора

26.06.2014, 15:18. Показов 810. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кто подскажет, где и как регулируется в CLR время исполнения деструктора.
Наблюдал интересную фишку у себя на компьютере - деструктор выполняется не более 3-х секунд.
Если к 3 секундам выполнение не завершено, то сборщик просто забивает на остаток кода - вроде его и небыло.

Тут же второй вопрос можно ли раcпараллелить в деструкторе код по освобождению ресурсов?

Типа масса легкого кода в одну ветку, а потенциально длительное освобождение в другую?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.06.2014, 15:18
Ответы с готовыми решениями:

Время жизни экземпляра класса
У меня реализован некоторый класс: public class AjPosition { public int ajIndex; public virtual bool...

Исполнение функций подгружаемых во время исполнения программы из сторонних хранилищ
День добрый, отзывчивые, знающие, смекалистые. Не знаю как чётко сформулировать вопрос, поэтому опишу как смогу, надеюсь поймёте.(Опытным...

Время жизни экземпляра при добавлении в коллекцию
class Cl { public int i; public Cl(int a) { i = a; } } //... ...

10
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
26.06.2014, 15:36
Цитата Сообщение от VKabanov Посмотреть сообщение
то сборщик просто забивает на остаток кода - вроде его и небыло.
Я бы посмотрел на то, как Вы это вычислили...
Цитата Сообщение от VKabanov Посмотреть сообщение
где и как регулируется в CLR время исполнения деструктора
А что есть деструктор по-Вашему? И где хотя бы примерно это может регулироваться?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
26.06.2014, 15:40
Цитата Сообщение от VKabanov Посмотреть сообщение
где и как регулируется в CLR время исполнения деструктора.
В реестре путем изменения значения.
Только затронет это все приложения, работающие под CLR, потому лучше пересмотрите код своего деструктора.

Цитата Сообщение от VKabanov Посмотреть сообщение
можно ли раcпараллелить в деструкторе код по освобождению ресурсов?
Можно, но не нужно.
0
307 / 284 / 102
Регистрация: 06.05.2014
Сообщений: 861
26.06.2014, 15:45
P.S. Имхо, единственная статья по деструктору C# написанная более-менее простым языком: Время жизни объектов.
1
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
26.06.2014, 16:04
Чёрт откопаешь этот ключик...
Цитата Сообщение от kolorotur Посмотреть сообщение
Только затронет это все приложения, работающие под CLR, потому лучше пересмотрите код своего деструктора.
Вот такое решение есть. Ну и что из всего этого добра надо.

Добавлено через 2 минуты
kolorotur, кстати, я вижу только возможность брейка при таймауте финализации, но никак не возможность изменить время...

The total allotted time for this operation is approximately 40 seconds, and each individual finalizer gets approximately 2 seconds to execute.
0
-4 / 5 / 1
Регистрация: 06.01.2014
Сообщений: 67
26.06.2014, 16:34  [ТС]
Spawn,
Замерял (примерно) так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using System.Diagnostics;
using System.Threading;
 
namespace Finalization
{
    class Program
    {
 public class myclass
        {
            
            ~myclass()
            {
                try
                {
                    throw new Exception("Abracadabra become");
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Catch section works");
                    Console.WriteLine("ex.Message= {0}", ex.Message);
                }
                finally
                {
                    Console.WriteLine("Finalizer works!");
                    for (int i = 0; i < 150000; i++)
                    {
                        Thread.Sleep(100);
                        Console.WriteLine(i * 100);
                    }
 
                }
            }
        }
 
        static void Main(string[] args)
        {
            myclass mc = new myclass();
            mc = null;
            Console.ReadLine();
        }
    }
}
В результате вывело в консоль:


Catch section works
ex.Message= Abracadabra become
Finalizer works!
0
100
200
300
400
500
600
700
800
900
1000
1100
1200
1300
1400
1500
1600
1700
1800
Press any key to continue . . .



А что есть деструктор по-Вашему? Доопределенный (не переопределенный) метод Finalize для объекта, который выполняется GC для тех объектов которые имеют его исходя из очередности нахождения в очереди финализации.
И где хотя бы примерно это может регулироваться? Вот самому это интересно. Наверняка среда имеет какие-то возможности регулировки своей конфигурации. Сам не знаю, но интересно где...

Добавлено через 6 минут
По делу
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
26.06.2014, 16:38
Цитата Сообщение от VKabanov Посмотреть сообщение
По делу
оттуда и выше упомянутые ссылки, кстати
0
-4 / 5 / 1
Регистрация: 06.01.2014
Сообщений: 67
26.06.2014, 16:55  [ТС]
Почему возник вопрос - подумал, а что если процедура освобождения ресурсов длительная сама по себе?
Например, ресурсы не локальные, а удаленные и требуется значительное время на их освобождение?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
26.06.2014, 17:09
Цитата Сообщение от VKabanov Посмотреть сообщение
Например, ресурсы не локальные, а удаленные и требуется значительное время на их освобождение?
IDisposable + using
0
-4 / 5 / 1
Регистрация: 06.01.2014
Сообщений: 67
26.06.2014, 17:15  [ТС]
kolorotur, это понятно, но в жизни не всегда так бывает...
Хотя да ограничения на выполнение Dispose нет.
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
26.06.2014, 17:53
VKabanov, интерфейс-то в любом случае повесить можно, а финализаторы явно использоввть вообще не рекомендуется
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.06.2014, 17:53
Помогаю со студенческими работами здесь

Показывать в отдельном потоке время "жизни" программы
Всем доброго времени суток. Сразу хочу сказать что прочел статью: http://msdn.microsoft.com/ru-ru/library/b2zk6580.aspx но она мало чем...

Приведение к типу, определённому только во время исполнения
В приложении есть список объектов List&lt;Объект&gt; определённых следующим образом: public class Объект { } public class Дорога : Объект {...

Thread Timer время жизни
Как задать время жизни tick, мне необходимо чтобы он прекращал работу по истечении установленного времени

Как задать программе время исполнения и время закрытия?
Подскажите пожалуйста как можно задать время исполнения и время закрытия программы допустим нужно запустить файл start 1.txt и через...

Время и дата. Время жизни программы
Сделал вывод даты в Edit, но столкнулся с проблемой, время не &quot;идёт&quot;. AnsiString Days = {&quot;Понедельник&quot;,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 11.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru