Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Высвобождение ресурсов / 25 сообщений из 33, страница 1 из 2
25.02.2004, 16:48
    #32421333
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
Допустим я создаю переменную и потом присваиваю значение null
Код: plaintext
1.
2.
HelloWorld hw1 = new HelloWolrd();
hw1 = null;


Насколько я понимаю, поскольку ссылок больше нет, то память должна с помощью GC высвобождаться?

Я хочу что-бы это произошло немедленно, сразу после hw1 = null;
И что-бы при этом отработал какой-либо метод класса HelloWolrd в котором я могу произвести дополнительные операции.
Что мне нужно сделать?
...
Рейтинг: 0 / 0
25.02.2004, 16:57
    #32421364
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
Вообще говоря никак - так как GC-процес недетерминирован

Ежели ваш объект держит какие-то ресурсы которые хочется освободить как можно скорее - то см IDisposable
...
Рейтинг: 0 / 0
25.02.2004, 17:04
    #32421378
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
...
Рейтинг: 0 / 0
25.02.2004, 18:54
    #32421545
Полуэкт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
если не вдаваться в подробности:

o.Dispose();
GC.Collect();

но вообще такие вопросы обычно от неправильного планирования возникают. у меня например все вопросы которые я задал тут - все от того что толком ни кто не знают что мы делаем. если бы был нормальный менеджер проекта и команда заточенная именно под разработку хорошо спроектированного продукта то вопросов бы не было. а у нас что не мэн - то звезда. причем небывалой величины :)
...
Рейтинг: 0 / 0
25.02.2004, 19:23
    #32421600
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
Я рассматриваю такую задачу: есть класс, при создании нового обьекта счётчик увеличивается, при уничтожении обьектов - счётчик уменьшается.
Допустим я пишу данный класс для стороннего использования и должен быть уверен, что как только все ссылки утеряны на переменную, обьект уничтожается и счётчик уменьшается. Исходим из того, что заставить сторонних разработчиков выполнять какой либо специальный метод у обьекта класса или использовать using () - невозможно. Единственно, за что можно зацепиться, когда реально происходит высвобождение срабатывает метод финализации, в котором счётчик уменьшается.

Практика показала, что hw1 = null не приводит к срабатыванию ни ~MyClass ни к срабатывнию Dispose при реализации интерфейса IDispose;
...
Рейтинг: 0 / 0
26.02.2004, 14:34
    #32422578
Петрович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
Может это тебе поможет: Как писать деструкторы класса?
...
Рейтинг: 0 / 0
26.02.2004, 15:48
    #32422764
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
Прочитал, толково.

Однако про null ничего там нет.
...
Рейтинг: 0 / 0
26.02.2004, 16:12
    #32422828
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
ms-help://MS.NETFrameworkSDKv1.1/cpref/html/frlrfSystemIDisposableClassTopic.htm

там очень ясно написано когда вызываются Finalize() и Dispose()
...
Рейтинг: 0 / 0
26.02.2004, 18:09
    #32423225
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
Все равно не хватает детерминированного деструктора. Нет единого виртуального метода для разрушения любого объекта, как например Free или Destroy в дельфи, и это очень огорчает.
Внутри Finalize некоторые методы объектов уже нельзя использовать - я на этот скрипучий пень уже налетел.
А еще крайне недостает виртуальных конструкторов. Вот.
А еще в наследнике нельзя при переопределении виртуального метода нельзя изменить зону видимости protected -> public, и это странное ограничение старого дельфиста весьма озадачивает.
...
Рейтинг: 0 / 0
26.02.2004, 18:21
    #32423250
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
Dankov
Все равно не хватает детерминированного деструктора.

Угу - это главная проблема GC - и в .Net и в Java. А вот в том же Power Builder - объекты можно удалять и принудительно и автоматически!

А еще крайне недостает виртуальных конструкторов.
деструкторов наверно :)
...
Рейтинг: 0 / 0
27.02.2004, 07:02
    #32423534
SergLet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
D C# нет такого понятия как в классическом С++! Здесь работает сборщик мусора!
...
Рейтинг: 0 / 0
27.02.2004, 10:00
    #32423692
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
авторА еще крайне недостает виртуальных конструкторов.
деструкторов наверно :)

Нет, именно конструкторов. Компонентная модель в дельфи стала невероятно удачной только в силу того факта, что не нужно было в каждом наследнике заново пересоздавать конструктор Create с параметром aOwner. А в C# нет возможности автоматом унаследовать параметризованный конструктор. И уже в силу этого компонентная модель сложнее.
...
Рейтинг: 0 / 0
27.02.2004, 10:07
    #32423702
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
авторD C# нет такого понятия как в классическом С++! Здесь работает сборщик мусора!

Да пусть себе работает, кто ему мешает. Это с возможностью иметь детерминированные деструкторов - перпендикулярно!

Ресурсы как правило ограничены. Это и хендлы, и количество коннектов, и банально память. И вполне может быть, что ресурс закончится быстрее, чем приложение дождется пока GC придет с лопатой. В этом случае сильно бы помогло наличие детерминированного деструктора. А GC пущай освобождает то, что программист сам не прибил. Не вижу препядствий.
...
Рейтинг: 0 / 0
27.02.2004, 10:19
    #32423726
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
авторА в C# нет возможности автоматом унаследовать параметризованный конструктор.

Чего, правда что-ли? Сам пока не проверял. В Java это точно есть. Какая причина не делать это в C# - непонятна.
...
Рейтинг: 0 / 0
27.02.2004, 11:47
    #32423920
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
В C# так же как и в C++ конструкторы а также оператор присваивания не наследуются
...
Рейтинг: 0 / 0
27.02.2004, 12:37
    #32424035
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
авторВ C# так же как и в C++ конструкторы а также оператор присваивания не наследуются

Вот C++ не надо вспоминать, а то сейчас стошнит. C# - синтетический язык, вобравший типа все лучшее из 15-ти языков после многолетних исследований с затратами под млрд президентов. Что не мешает удивляться некоторым очевидным недостаткам.
...
Рейтинг: 0 / 0
27.02.2004, 13:10
    #32424127
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
to Dankov:

Я читал что от C,C++,Java,Pascal, Biasic. А какие еще языки?
...
Рейтинг: 0 / 0
27.02.2004, 13:11
    #32424129
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
Dankov

Вот C++ не надо вспоминать, а то сейчас стошнит
При всем уважении - не на те вещи у вас аллергия. Эти ограничения в С++ и в C# появились не случайно - а как раз в результате "многолетних исследований с затратами под млрд президентов"

P.S> softbuilder@inbox.ru а вы уверены что в Java не тоже самое - а то я с ней не знаком
...
Рейтинг: 0 / 0
27.02.2004, 13:33
    #32424186
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
to funikovyuri:

Возможно я не прав. Попробую уточнить.
...
Рейтинг: 0 / 0
27.02.2004, 13:48
    #32424212
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
Да, признаю ошибочность своего утверждения.
Возможен только вызов конструктора супер-класса.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
public class MyClass2 extends MyClass1
{
 public MyClass2(String pHi)
 {
  super(pHi);
 }
}


Так как конструктор не наследуется.
...
Рейтинг: 0 / 0
27.02.2004, 14:07
    #32424256
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
А теперь главный вопрос - а в Delphi - конструкторы наследуются? точно?
...
Рейтинг: 0 / 0
27.02.2004, 14:34
    #32424308
Петрович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
Народ, по-моему, вы гоните!

В C# конструкторы наследуются:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class BaseClass
{
  public BaseClass()
  {
    //инициализируем поля базового класса
  }
}

public class InheritClass: BaseClass
{
  public InheritClass()
     :base()  //Если нужно, то инициализируем поля родительского класса
  {
     //Инициализируем поля унаследованного класса
  }
}
...
Рейтинг: 0 / 0
27.02.2004, 14:41
    #32424327
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
Да не, Петрович, это вы неправильно понимаете что значит "наследуется" - а значит что в случае наследования конструкторов будет компилиться такой пример
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class base
{
public:
     base(int a){}
};
class derived: public base
{
public:
};

void main(void)
{
   derived drv = new derived( 10 );
}
...
Рейтинг: 0 / 0
27.02.2004, 17:29
    #32424787
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
авторА теперь главный вопрос - а в Delphi - конструкторы наследуются? точно?

Совершенно точно. С первых дней существования дельфи.
...
Рейтинг: 0 / 0
27.02.2004, 18:14
    #32424844
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высвобождение ресурсов
Ну тогда это даже чуть чуть странно - с одной стороны C++,Java,C# - с другой Delphi. Причем автор у Delphi и C# один и тот же :)

Ok - будет время я покопаю в этом направлении - интересно чем Хейлсберг руководствовался при написании Object Pascal.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Высвобождение ресурсов / 25 сообщений из 33, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]