Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2014, 10:39   #1
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию Принудительный мусорщик ?

Уважаемые, столкнулся с ошибкой, которую не понимаю как решить, а именно вызов мусорщика.

Суть в том, что есть массив данных, каждый элемент массива под 1 лям символов. Элемент попадает в программу, там происходит работа, далее программа выводит данные. Обработка данных в первых раз проходит как надо, а вот все последующие обработки, то там, то сям сбиваются ...

Логично предположить, что после первого прохода память почистилась, но не вся, а лишь частично (так как сбой идет лишь частичный, например сдвиг строки, вывод части данных из предыдущего элемента и т.д.)

Ибо для корректной работы постоянно приходится перезапускать программу - что брэд.

Как вариант проблемы - говнокод и реализация программы, но есть и другой вариант - вызов мусорщика, который собственно все и почистит.

Как быть, что делать ?

Последний раз редактировалось L6go1as; 27.09.2014 в 10:45.
L6go1as вне форума Ответить с цитированием
Старый 27.09.2014, 10:50   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Покажите код.
Streletz вне форума Ответить с цитированием
Старый 27.09.2014, 10:50   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
есть и другой вариант - вызов мусорщика
А есть и третий - пересмотреть алгоритм и обрабатывать не лям а меньше.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.09.2014, 11:20   #4
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Покажите код.
увы, показать не могу, ибо ком.тайна + его объемы ...

Цитата:
Сообщение от Stilet Посмотреть сообщение
А есть и третий - пересмотреть алгоритм и обрабатывать не лям а меньше.
лям - это входные данные(меньше загружать не представляется возможным), часть из которых - лишняя, очищается на первых же парах.

Программа имеет простой для меня вид(все разбиваю на классы, т.е. тьма *.cs файлов, каждый берет часть исходных данных, и все собирается в хабе, который вызывает экземпляры):

Входные Данные -> Метод(Входные данные): Метод_2(Входные данные, out), Метод_3(Входные данные, out Данные), Метод_2(Входные данные, out Данные), Метод_4(Входные данные(ауты из предыдущих методов)) -> Выходные данные

И такая структура повторяется из-под множества экземпляров классов. Полученные данные собираются во-едино и уже выводятся.

Плюс все это идет в многопотоке.

/************/

Сейчас думаю программу просто переписать, по возможности оптимизировать (возможно остаточные данные перестанут оставаться)

Может где-то ссылка на объект висит, поэтому очистка и не происходит ...

/************/

Но ведь я правильно понимаю, что мусорщик появляется как в ходе работы, так и по завершению ее (без выхода из программы) ?

/************/

Может где нить dispose() пропустил ?

Последний раз редактировалось L6go1as; 27.09.2014 в 11:33.
L6go1as вне форума Ответить с цитированием
Старый 27.09.2014, 12:22   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

В шарпе мусорщик сам все должен подбирать по мере надобности.
ИМХО у тебя однозначно сам алгоритм обработки неверен.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.09.2014, 12:32   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
В шарпе мусорщик сам все должен подбирать по мере надобности.
ИМХО у тебя однозначно сам алгоритм обработки неверен.
не должен и не делает.
он просто работает регулярно, но по окончанию памяти он не делает прохода.

ТС, вставьте GC.Collect() в концах итераций, где поидее стало чище.
тока не забывайте что должны действительно на тот момент быть не используемые данные.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.09.2014, 17:20   #7
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
не должен и не делает
Должен и делает, в т.ч. ориентируется на объем свободной памяти
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 28.09.2014, 10:27   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Luuzuk Посмотреть сообщение
Должен и делает, в т.ч. ориентируется на объем свободной памяти
в 4.5 может быть.
у нас на работе есть сервер(на дотнете 4,0) обрабатывающий запросы.
так вот без явного GC.Collect он падает от не хватки памяти.
возможно GC не успевает, а при блокирующем вызове успевает.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.09.2014, 10:59   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
у нас на работе есть сервер(на дотнете 4,0) обрабатывающий запросы.
так вот без явного GC.Collect он падает от не хватки памяти
Хм... IIS? Я тоже сталкивался с таким но на 4.5. Принудительные вызовы коллектора не помогали, пересмотрели алгоритм и порядок.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.09.2014, 08:50   #10
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

А какого рода данные то? Может нет смысла создавать заного все переменные? Если создать массив при начале работы а потом просто обновлять данные будет проще?

В любом случае стоит вернутся на этап разработки алгоритма и там поискать выход.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
принудительный разрыв интернет соединения shilovec5377 Работа с сетью в Delphi 4 01.05.2012 17:30
Принудительный вывод Exception на одном языке Zer0 Общие вопросы Delphi 12 19.03.2012 16:31
Принудительный выход из процедуры kardinal94 Общие вопросы Delphi 8 12.07.2011 03:55
Автозагрузка или принудительный запуск _-Re@l-_ Общие вопросы Delphi 19 15.01.2011 15:26