Очистка памяти

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 008
Благодарностей
538
Баллы
113
Доброго времени суток, есть шаблон, написан полностью в VS сниппете, внутри проекта цикл форич и он можно сказать что бесконечный.
Проблема в следующем, чем больше шаблон работает тем ЗП жрет всё больше оперативки, я как понимаю там куча не чистится.
Понаблюдав за работой других шаблонов, в которых нету бесконечных циклов (сделанные на кубиках ), там такой проблемы нет, я как понимаю ЗП после выполнения шаблона кучу чистит, и начинает новое выполнение шаблона.
Но у меня получается что шаблон бесконечный и сам ЗП кучу не чистит, тк как шаблон не заканчивает выполнение, а он там память забивает, можно ли как то принудительно заставить ЗП очистить память? Я уже даже в проекте принудительный вызов GC сделал, не помогает.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 373
Благодарностей
3 297
Баллы
113
Но у меня получается что шаблон бесконечный и сам ЗП кучу не чистит, тк как шаблон не заканчивает выполнение, а он там память забивает, можно ли как то принудительно заставить ЗП очистить память?
Тут уже не сколько постер, а код который выполняется.
внутри проекта цикл форич и он можно сказать что бесконечный.
Тут и проблема, проверяйте наличия Dispose, перезапуск браузера и др.
но проще будет сделать завершение шаблона с последующим запуском для продолжения.
Я уже даже в проекте принудительный вызов GC сделал, не помогает.
Его нельзя принудительно вызвать в .net framework, оно так не работает.
 
Последнее редактирование:

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 008
Благодарностей
538
Баллы
113
Тут уже не сколько постер, а код который выполняется.

Тут и проблема, проверяйте наличия Dispose, перезапуск браузера и др.

Его нельзя принудительно вызвать в .net, оно так не работает.
Dispose там сделан везде где можно.
А как можно браузер перезапустить?
По поводу сборки мусора


Класс System.GC
Функционал сборщика мусора в библиотеке классов .NET представляет класс System.GC. Через статические методы данный класс позволяет обращаться к сборщику мусора. Как правило, надобность в применении этого класса отсутствует. Наиболее распространенным случаем его использования является сборка мусора при работе с неуправляемыми ресурсами, при интенсивном выделении больших объемов памяти, при которых необходимо такое же быстрое их освобождение.

Рассмотрим некоторые методы и свойства класса System.GC:

  • Метод AddMemoryPressure информирует среду CLR о выделении большого объема неуправляемой памяти, которую надо учесть при планировании сборки мусора. В связке с этим методом используется метод RemoveMemoryPressure, который указывает CLR, что ранее выделенная память освобождена, и ее не надо учитывать при сборке мусора.
  • Метод Collect приводит в действие механизм сборки мусора. Перегруженные версии метода позволяют указать поколение объектов, вплоть до которого надо произвести сборку мусора
  • Метод GetGeneration(Object) позволяет определить номер поколения, к которому относится переданый в качестве параметра объект
  • Метод GetTotalMemory возвращает объем памяти в байтах, которое занято в управляемой куче
  • Метод WaitForPendingFinalizers приостанавливает работу текущего потока до освобождения всех объектов, для которых производится сборка мусора


Еще одна перегруженная версия принимает еще и второй параметр - перечисление GCCollectionMode. Это перечисление может принимать три значения:

  • Default: значение по умолчанию для данного перечисления (Forced)
  • Forced: вызывает немедленное выполнение сборки мусора
  • Optimized: позволяет сборщику мусора определить, является ли текущий момент оптимальным для сборки мусора
Например, немедленная сборка мусора вплоть до первого поколения объектов: GC.Collect(1, GCCollectionMode.Forced);
 
  • Спасибо
Реакции: Jab1Bot

Oleg1987

Client
Регистрация
11.08.2014
Сообщения
1 165
Благодарностей
744
Баллы
113
Всегда так было. При долгом выполнении начинает течь память и сыпаться баги. Ограничивай время одной итерации, сохраняй состояние шаблона и при следующей итерации - загружай предыдущее состояние. А пытаться управлять памятью в .net - такое себе занятие
 
  • Спасибо
Реакции: Sherminator

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 008
Благодарностей
538
Баллы
113
Всегда так было. При долгом выполнении начинает течь память и сыпаться баги. Ограничивай время одной итерации, сохраняй состояние шаблона и при следующей итерации - загружай предыдущее состояние. А пытаться управлять памятью в .net - такое себе занятие
Вот лень шаб переделывать что бы вот сохранять состояние и вот это вот всё, думал что можно как то в ЗП памятью поуправлять..
 
  • Спасибо
Реакции: TommyTuta

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 367
Благодарностей
958
Баллы
113
У меня, к слову, повысилась стабильность в одном таком же "цикличном круглосуточном шаблоне" после того, как добавил перезапуск инстанса, условно, после определенного количества циклов (можно по времени перезапускать, это уже как захочется). Но это, конечно, если непосредственно в инстансе проблема. Не исключено, что в другом.
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 008
Благодарностей
538
Баллы
113
У меня, к слову, повысилась стабильность в одном таком же "цикличном круглосуточном шаблоне" после того, как добавил перезапуск инстанса, условно, после определенного количества циклов (можно по времени перезапускать, это уже как захочется). Но это, конечно, если непосредственно в инстансе проблема. Не исключено, что в другом.
Код подскажи пожалуйста для перезапуска.
А проблема точно в инстансе, код там уже оптимизирован дальше некуда
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 367
Благодарностей
958
Баллы
113
Код подскажи пожалуйста для перезапуска.
А проблема точно в инстансе, код там уже оптимизирован дальше некуда
У меня кубик )))
Проверь instance.Reload();
Думаю, должно сработать ))
 
  • Спасибо
Реакции: Sherminator

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 008
Благодарностей
538
Баллы
113
У меня кубик )))
Проверь instance.Reload();
Думаю, должно сработать ))
Это великолепно, из c# кубика код работает а из vs кубика нет, ждем ЗП 8 как говорится
Господи, он даже из общего кода не работает
 
Последнее редактирование:

White trash

Client
Регистрация
09.06.2014
Сообщения
782
Благодарностей
346
Баллы
63

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 008
Благодарностей
538
Баллы
113
А я просто закрываю единственную активную вкладку и сразу открываю заново.
Тоже так делаю, мне это помогло только от лютой утечки памяти, раньше было так что шаб работает часов 6, а потом может за пол часа сожрать всю оперативку резко, сделал что бы в конце каждого цикла вкладки закрывались и по новой открывались, в итоге теперь шаб может несколько суток проработать, ему требуется больше времени что бы выжрать всю оперативу
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 373
Благодарностей
3 297
Баллы
113
Если хотите, что бы браузер меньше занимал памяти, то установите обе эти настройки в 1:
112038

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

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 008
Благодарностей
538
Баллы
113
Если хотите, что бы браузер меньше занимал памяти, то установите обе эти настройки в 1:
Посмотреть вложение 112038

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

А как режим браузере переключить можно кодом?
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)