Управление памятью

Простейшие вопросы в области инженерной разработки
Ответить
max69s
beginner
beginner
Сообщения: 49
Зарегистрирован: 01 авг 2014, 11:45
Версия LabVIEW: 2013
Контактная информация:

Управление памятью

Сообщение max69s »

Здравствуйте. Освобождает ли лабвью память после закрытия виртуального прибора vi? Если нет, то как его заставить это делать? Спасибо.
Shurik_85
beginner
beginner
Сообщения: 49
Зарегистрирован: 13 апр 2014, 18:53
Версия LabVIEW: 14
Контактная информация:

Re: Управление памятью

Сообщение Shurik_85 »

max69s писал(а):Здравствуйте. Освобождает ли лабвью память после закрытия виртуального прибора vi? Если нет, то как его заставить это делать? Спасибо.
Я задавал такой вопрос в техподдержку и на курсах тоже говорят, что для того чтобы VI освобождали память, не нужно останавливать их кнопкой "Abort", а лучше корректно остановить все циклы (послать соответствующий сигнал на терминал Loop Condition), закрыть все сеансы связи, "убить" программно все открытые очереди (Queue), RTFIFO,..... и т.п.
А иначе есть вероятность, что каждый запуск программы будет "отгрызать" от памяти соответствующий кусочек и не освобождать его после аварийной остановки.
Последний раз редактировалось Shurik_85 01 ноя 2016, 15:17, всего редактировалось 1 раз.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2211
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 27 раз

Re: Управление памятью

Сообщение Borjomy_1 »

Здравствуйте. Освобождает ли лабвью память после закрытия виртуального прибора vi? Если нет, то как его заставить это делать? Спасибо.
Освобождает. А зачем вам это?
Artem.spb

Activity Автор
professor
professor
Сообщения: 3404
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 175 раз
Контактная информация:

Re: Управление памятью

Сообщение Artem.spb »

Вдополнение вышесказенному: освобождает, но могут быть утечки.
Есть ещё Request Deallocation Function, но я в своё время не зметил особой пользы от неё.
а тут у нас было обсуждение проблем утечек
max69s
beginner
beginner
Сообщения: 49
Зарегистрирован: 01 авг 2014, 11:45
Версия LabVIEW: 2013
Контактная информация:

Re: Управление памятью

Сообщение max69s »

Спасибо за ответы.
А нужно это затем, что у меня в системе емеется модуль c#, который генерирует массив целых чисел. Далее эти данные передаются для обработки по цепочке виртуальных приборов.
Каждая генерация данных занимает около 1 гб. В итоге на 3-5 генерации вылетает ошибка OutOfMemory, тк выделенный стек в 4гб переполнен (lv 32 бит).
Если отключить цепочку обработки и оставить только инициализацию модуля c#, вызов функций генерации данных и очистку памяти (через методы этого модуля), то все работает как часы. Это видно и по динамике изменения занимаемого объема памяти в Диспетчере задач.
Если бы обработка в каком-то из vi не была завершена корректно, тогда скрашится вся система.
Такое ощущение, что при передаче одного и того же массива из vi в vi labview передаёт не указатель на область памяти, а копирует массив, и после загрузки его в следующем vi. В итоге с каждой генерацией по чуть-чуть накапливается потреблемая память.
Более того, если закрыть проект и оставить только стартовое окно со списком недавно использовавшихся проектов, то :labview: так не освободит ресурсы и процесс продолжается занимать около 3гб озу. Приходится полностью перезапускать процесс.
alex3f
beginner
beginner
Сообщения: 26
Зарегистрирован: 23 авг 2016, 09:16
Версия LabVIEW: 2016
Контактная информация:

Re: Управление памятью

Сообщение alex3f »

max69s, почитайте встроенную справку по палитре Memory Control Functions. Там есть инструменты для работы с данными по указателю, посмотрите примеры. А также про In Place Element Structure.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Управление памятью

Сообщение dadreamer »

max69s писал(а):Такое ощущение, что при передаче одного и того же массива из vi в vi labview передаёт не указатель на область памяти, а копирует массив, и после загрузки его в следующем vi. В итоге с каждой генерацией по чуть-чуть накапливается потреблемая память.
Смотря как вы работаете с этой памятью в ваших библиотеках. Не видя кода сложно что либо сказать. Код в студию! :rtfm:
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2211
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 27 раз

Re: Управление памятью

Сообщение Borjomy_1 »

Вероятнее всего, чтобы такая ситуация не возникала, необходимо выделять память (в которой C# функция возвращает данные) в вызывающей :vi: . Т.е на вход CLFN подается заданного размера массив. В таком случае выделенная память будет освобождена сборщиком :labview:
Ответить

Вернуться в «Для чайников»