Удаление класса (C#)
От: Eksin  
Дата: 09.10.05 10:36
Оценка: :)
MyClass my = new MyClass();
my.DoSomething();
my.??? // Теперь надо убить экземпляр класса my, но как это сделать? В Си++ было бы delete my...
my.DoSomething(); // Должен соответственно выдать ошибку, так как экземпляр класса будет убит, чего только я не пробывал, но ошибки нет, следовательно всё что я делал не убивает my

Как убить my?

Я конечно понимаю, что .NET сам убивает, но ведь если классов будет офигенно много, то это просто трата памяти будет, ведь я могу создавать классы только тогда, когда это необходимо и убивать их тогда когда нужно, я сомневаюсь, что .NET сделает всё также хорошо...

Вот для примера:

MyClass my = new MyClass();
my.DoSomething();
// куча куча всего делается... В это время я так понимаю my сидит в памяти и зря её занимает, ведь он для этой кучи кучи всего не нужен совсем, дык нафига ему память зря занимать? Тут конечно предположим, что в классе ничего полезного не хранится, нет никаких переменных, которые потом нужно будет восстанавливать и т.п.
my.DoSomething();

Как бы я сделал на Си++:

MyClass my = new MyClass();
my.DoSomething();
delete my;
// куча куча всего делается... В это время память занимаемая my свободна, что радует...
my = new MyClass();
my.DoSomething();
delete my;

Или я не дооцениваю умность .NET и он сделает сам то, что я сделал только что на примере Си++?
Re: Удаление класса (C#)
От: Mab Россия http://shade.msu.ru/~mab
Дата: 09.10.05 10:43
Оценка:
Здравствуйте, Eksin, Вы писали:

E>Я конечно понимаю, что .NET сам убивает, но ведь если классов будет офигенно много, то это просто трата памяти будет, ведь я могу создавать классы только тогда, когда это необходимо и убивать их тогда когда нужно, я сомневаюсь, что .NET сделает всё также хорошо...

Во-первых, создаются не классы, а объекты -- экземпляры классов. Во-вторых, почитайте про garbage collection и IDisposable pattern. В-третьих, воспользуйтесь поиском.
Удаление класса (C
От: Аноним  
Дата: 09.10.05 10:52
Оценка:
] надо убить экземпляр класса my, но как это сделать?

С++:
delete my...

C#:
my = null;

GC (сборщик мусора) обнаружит, что my никому не нужен. После этого GC когда захочется, т.е. не сразу, освободит память занимаемую my.

GC можно поторопить со сборкой мусора и вызвать:
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();

Другой способ сразу освободить ресурсы, занимаемые в my: в MyClass реализовать интерфейс IDisposable и в методе Dispose() освобождать ресурсы.
---
мои работы (конкурс 2005): LayeredWindow, Lens, MenuBuilder, Win32ResourceManager, Html2XmlConverter, DropDownHolder (Popup).


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Удаление класса (C#)
От: GlebZ Россия  
Дата: 09.10.05 11:07
Оценка:
Здравствуйте, Eksin, Вы писали:

E>Я конечно понимаю, что .NET сам убивает, но ведь если классов будет офигенно много, то это просто трата памяти будет, ведь я могу создавать классы только тогда, когда это необходимо и убивать их тогда когда нужно, я сомневаюсь, что .NET сделает всё также хорошо...

Не сомневайся. В большинстве случаев лучше. И не только убивать, но и аллокировать.


E>Или я не дооцениваю умность .NET и он сделает сам то, что я сделал только что на примере Си++?

Ага. Тебе уже написали, теряй ссылки. Объект без ссылок уже не объект(в большинстве случаев). А более подробно с GC ты можешь ознакомится на этом сайте, и еще подробнее в MSDN.

С уважением, Gleb.
Re[2]: Удаление класса (C#)
От: Eksin  
Дата: 09.10.05 11:31
Оценка:
Здравствуйте, Mab, Вы писали:

Mab>Во-первых, создаются не классы, а объекты -- экземпляры классов.


Да да, всё верно, просто ошибся...

Всем спасибо, кажется всё понял...
Re: Удаление класса (C#)
От: orangy Россия
Дата: 10.10.05 01:48
Оценка:
Здравствуйте, Eksin, Вы писали:

E>Я конечно понимаю, что .NET сам убивает, но ведь если классов будет офигенно много, то это просто трата памяти будет, ведь я могу создавать классы только тогда, когда это необходимо и убивать их тогда когда нужно, я сомневаюсь, что .NET сделает всё также хорошо...

http://gzip.rsdn.ru/article/dotnet/GCnet.xml
Автор(ы): Игорь Ткачев
Дата: 06.12.2002
Алгоритм работы сборщика мусора (garbage collector, далее просто GC), являющегося частью CLR, подробно описан в книге Джефри Рихтера (Jeffrey Richter) «Applied Microsoft .NET Framework Programming». Мы не будем приводить здесь столь же подробное описание этого алгоритма, но обязательно остановимся на некоторых ключевых моментах.
"Develop with pleasure!"
Re: Удаление класса (C#)
От: Pentium133  
Дата: 10.10.05 07:24
Оценка:
Здравствуйте, Eksin, Вы писали:

E>Как убить my?


Реализовать в классе интерфейс IDisposible, в методе Dispose освобождать все ресурсы и тогда

using (MyClass my = new MyClass())
{
   my.DoSomething();
}
//сдесь будет вызван my.Dispose
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.