![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 20.10.2011
Сообщений: 433
|
![]()
Уважаемые, столкнулся с ошибкой, которую не понимаю как решить, а именно вызов мусорщика.
Суть в том, что есть массив данных, каждый элемент массива под 1 лям символов. Элемент попадает в программу, там происходит работа, далее программа выводит данные. Обработка данных в первых раз проходит как надо, а вот все последующие обработки, то там, то сям сбиваются ... Логично предположить, что после первого прохода память почистилась, но не вся, а лишь частично (так как сбой идет лишь частичный, например сдвиг строки, вывод части данных из предыдущего элемента и т.д.) Ибо для корректной работы постоянно приходится перезапускать программу - что брэд. Как вариант проблемы - говнокод и реализация программы, но есть и другой вариант - вызов мусорщика, который собственно все и почистит. Как быть, что делать ? Последний раз редактировалось L6go1as; 27.09.2014 в 10:45. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
![]()
Покажите код.
|
![]() |
![]() |
![]() |
#3 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 20.10.2011
Сообщений: 433
|
![]()
увы, показать не могу, ибо ком.тайна + его объемы ...
лям - это входные данные(меньше загружать не представляется возможным), часть из которых - лишняя, очищается на первых же парах. Программа имеет простой для меня вид(все разбиваю на классы, т.е. тьма *.cs файлов, каждый берет часть исходных данных, и все собирается в хабе, который вызывает экземпляры): Входные Данные -> Метод(Входные данные): Метод_2(Входные данные, out), Метод_3(Входные данные, out Данные), Метод_2(Входные данные, out Данные), Метод_4(Входные данные(ауты из предыдущих методов)) -> Выходные данные И такая структура повторяется из-под множества экземпляров классов. Полученные данные собираются во-едино и уже выводятся. Плюс все это идет в многопотоке. /************/ Сейчас думаю программу просто переписать, по возможности оптимизировать (возможно остаточные данные перестанут оставаться) Может где-то ссылка на объект висит, поэтому очистка и не происходит ... /************/ Но ведь я правильно понимаю, что мусорщик появляется как в ходе работы, так и по завершению ее (без выхода из программы) ? /************/ Может где нить dispose() пропустил ? Последний раз редактировалось L6go1as; 27.09.2014 в 11:33. |
![]() |
![]() |
![]() |
#5 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
В шарпе мусорщик сам все должен подбирать по мере надобности.
ИМХО у тебя однозначно сам алгоритм обработки неверен.
I'm learning to live...
|
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
он просто работает регулярно, но по окончанию памяти он не делает прохода. ТС, вставьте GC.Collect() в концах итераций, где поидее стало чище. тока не забывайте что должны действительно на тот момент быть не используемые данные. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
![]()
Должен и делает, в т.ч. ориентируется на объем свободной памяти
Благодарить в репутацию. Проклинать — туда же
![]() |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
в 4.5 может быть.
у нас на работе есть сервер(на дотнете 4,0) обрабатывающий запросы. так вот без явного GC.Collect он падает от не хватки памяти. возможно GC не успевает, а при блокирующем вызове успевает. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#9 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
![]()
А какого рода данные то? Может нет смысла создавать заного все переменные? Если создать массив при начале работы а потом просто обновлять данные будет проще?
В любом случае стоит вернутся на этап разработки алгоритма и там поискать выход.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
принудительный разрыв интернет соединения | 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 |