Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для mikhail_g
192 / 147 / 27
Регистрация: 02.05.2011
Сообщений: 467
1

Произойдет ли освобождение памяти и сбор мусора в приложенном коде

16.01.2012, 11:38. Показов 1092. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста, произойдет ли автоматическое освобождение памяти занимаемой экземплярами class_B и экземплярами class_C в случае вызова метода class_A.delAll:

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
namespace myNamespace
{
    public class class_A
    {
        List <class_B> myList;
        
        public void delAll (class_B item)
        {
            myList=null;
            GC.Collect();
            GC.WaitForPendingFinalizers();
        }
    }
    
    internal class class_B
    {
        List <class_C> myList;
        
        public void addToList ()
        {
            myList.Add(new class_C());
        }
    }
 
    internal class class_C
    {
        public class_C()
        {
        }
    }
 
}
Дело в том, что я не уверен что при удалении ссылки на объект List<class_B> автоматический сборщик мусора поймет, что ссылки, хранимые в объекте List<class_C>, класса В не будут больше использоваться и можно их удалить.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.01.2012, 11:38
Ответы с готовыми решениями:

Уничтожается ли объект сборщиком мусора в приложенном коде
Доброго дня Вам. Возник вопрос: имеем код namespace VNServer { public partial class...

Сбор мусора для синглетного приложения wcf хостинг в iis
Здравствуйте! Кто-нибудь сталкивался с не работающей сборкой мусора wcf приложения при хостинге на...

Найти ошибку в приложенном коде
Function Sec(zn As Range) As Double Dim pi As Double, x As Double pi = WorksheetFunction.pi zn =...

Найти ошибки в приложенном коде
как исправить ошибку? int b,p; double v,v2,dv,m,m2,dm,W; do ...

8
35 / 35 / 1
Регистрация: 14.01.2011
Сообщений: 111
16.01.2012, 12:09 2
тут как раз подробно по твоему вопросу.
http://habrahabr.ru/blogs/net/89720/
0
Эксперт .NET
 Аватар для kolorotur
17794 / 12945 / 3381
Регистрация: 17.09.2011
Сообщений: 21,229
16.01.2012, 12:38 3
Удалены они будут.
Вопрос в другом: для каких целей вы вручную вызываете сборщик?
0
 Аватар для mikhail_g
192 / 147 / 27
Регистрация: 02.05.2011
Сообщений: 467
16.01.2012, 13:42  [ТС] 4
Удалены они будут.
Вопрос в другом: для каких целей вы вручную вызываете сборщик?
Я не хочу вручную вызывать сборщик мусора, написал так для примера, если вы про этот метод:
C#
1
2
3
4
5
6
  public void delAll (class_B item)
        {
            myList=null;
            GC.Collect();
            GC.WaitForPendingFinalizers();
        }
Мне надо быть уверенным в том, что когда ссылка на class_A больше использоваться не будет, все связанные внутри класса объекты будут удалены.

тут как раз подробно по твоему вопросу.
http://habrahabr.ru/blogs/net/89720/
Спасибо! полезная информация
0
35 / 35 / 1
Регистрация: 14.01.2011
Сообщений: 111
16.01.2012, 13:47 5
C#
1
2
3
4
5
6
 public void delAll (class_B item)
        {
            myList=null;
            GC.Collect();
            GC.WaitForPendingFinalizers();
        }
1. Не вижу смысла вообще вызывать вообще сборщик мусора явно он сам отчистит память когда надо, и как надо в твоем случае.
2. зачем ты передаешь class_B item?
0
Эксперт .NET
 Аватар для kolorotur
17794 / 12945 / 3381
Регистрация: 17.09.2011
Сообщений: 21,229
16.01.2012, 13:57 6
Цитата Сообщение от mikhail_g Посмотреть сообщение
Мне надо быть уверенным в том, что когда ссылка на class_A больше использоваться не будет, все связанные внутри класса объекты будут удалены.
Если на эти объекты больше ссылок нигде нет, то удалены они будут без проблем.
0
 Аватар для mikhail_g
192 / 147 / 27
Регистрация: 02.05.2011
Сообщений: 467
16.01.2012, 14:17  [ТС] 7
зачем ты передаешь class_B item?
Случайно написал, конечно же не надо.

Если на эти объекты больше ссылок нигде нет, то удалены они будут без проблем.
Я уже разобрался спасибо!!
Дело в том,что я работаю с DCOM объектом - ОРС сервером. Моя программа-клиент ОРС сервера может содержать достаточно большое кол-во параллельных ОРС соединений. Поэтому, когда одно из них закрывается, надо очень аккуратно проследить за тем, что бы были удалены все тэги и т.п. объекты ОРС сервера. Именно поэтому такой вопрос и возник.
Class_A - сам ОРС сервер
Class_B - класс для работы с группами тэгов
Class_C - класс для работы с одним тэгом (переменная читаемая из ОРС сервера).

Если некорректно закрыть соединение, т.е. не только вызвать методв Disconnect, но и освободить ссылки на объекты, то могут возникнуть ошибки доступа при дальнейшей работе. Если в случае удаления Class_A удаляются автоматически все внутренние ссылки, то проблем совсем быть не должно)

Спасибо за ответы!
0
 Аватар для GreyDark
8 / 8 / 1
Регистрация: 11.02.2010
Сообщений: 21
30.03.2012, 14:37 8
Подскажите, пожалуйста, если у меня есть глобальный массив и функция, которая для изменения размера массива выделяет память оператором new, нужно ли перед следующим new освобождать выделенную память? И чтобы он попал под сборку мусора достаточно ли Array = null?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
30.03.2012, 14:40 9
Цитата Сообщение от GreyDark Посмотреть сообщение
нужно ли перед следующим new освобождать выделенную память?
необязательно
Цитата Сообщение от GreyDark Посмотреть сообщение
И чтобы он попал под сборку мусора достаточно ли Array = null?
совсем ничего не нужно, система сборки мусора сделает все автоматически
1
30.03.2012, 14:40
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.03.2012, 14:40
Помогаю со студенческими работами здесь

Найти ошибку в приложенном коде
using System; using System.Collections.Generic; using System.Linq; using...

Найти ошибку в приложенном коде
ВОПРЕКИ ВСЯКОЙ ЛОГИКЕ но вот такой код Sub Перенос() ' ' Перенос Макрос ' Макрос записан...

Найти ошибки в приложенном коде
Вот я написал такую программу: using System; using System.Collections.Generic; using...

Исправить ошибки в приложенном коде
н е м о г у понять в чем моя ошибка?! помогите исправить!!! using System; using...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru