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 и он сделает сам то, что я сделал только что на примере Си++?
] надо убить экземпляр класса my, но как это сделать?
С++:
delete my...
C#:
my = null;
GC (сборщик мусора) обнаружит, что my никому не нужен. После этого GC когда захочется, т.е. не сразу, освободит память занимаемую my.
GC можно поторопить со сборкой мусора и вызвать:
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
Другой способ сразу освободить ресурсы, занимаемые в my: в MyClass реализовать интерфейс IDisposable и в методе Dispose() освобождать ресурсы.
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Здравствуйте, Eksin, Вы писали:
E>Я конечно понимаю, что .NET сам убивает, но ведь если классов будет офигенно много, то это просто трата памяти будет, ведь я могу создавать классы только тогда, когда это необходимо и убивать их тогда когда нужно, я сомневаюсь, что .NET сделает всё также хорошо...
Не сомневайся. В большинстве случаев лучше.

И не только убивать, но и аллокировать.
E>Или я не дооцениваю умность .NET и он сделает сам то, что я сделал только что на примере Си++?
Ага. Тебе уже написали, теряй ссылки. Объект без ссылок уже не объект(в большинстве случаев). А более подробно с GC ты можешь ознакомится на этом сайте, и еще подробнее в MSDN.
С уважением, Gleb.
Здравствуйте, Mab, Вы писали:
Mab>Во-первых, создаются не классы, а объекты -- экземпляры классов.
Да да, всё верно, просто ошибся...
Всем спасибо, кажется всё понял...
Здравствуйте, 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». Мы не будем приводить здесь столь же подробное описание этого алгоритма, но обязательно остановимся на некоторых ключевых моментах.
Здравствуйте, Eksin, Вы писали:
E>Как убить my?
Реализовать в классе интерфейс IDisposible, в методе Dispose освобождать все ресурсы и тогда
using (MyClass my = new MyClass())
{
my.DoSomething();
}
//сдесь будет вызван my.Dispose