Добрый день. Имеется сервер, который получает данные по UDP в виде массива типа double, добавляет к каждому элементу id (соответственно тоже double) и всё это отправляет дальше на клиенты. Размер массива выходит около 500 элементов. Во время получения данных есть возможность начать запись в бинарный файл. Но при начале записи размер файла стремительно растёт, за условные 30 секунд может записать несколько Гб. Откуда такое количество данных?
P.S. Также пробовал записывать в TDMS, но там уже начались другие проблемы - при достижении примерно 700мб появлялась неизвестная ошибка (номер 2500) и соответственно всё переставало писать. Что-то вычитал по поводу переполнения памяти при постоянной записи одной из виаек tdms'a, но это только догадки.
Собственно вопрос - откуда берутся такие объёмы? Спасибо.
Слишком быстрая запись в файл
-
- assistant
- Сообщения: 113
- Зарегистрирован: 05 ноя 2020, 08:26
- Версия LabVIEW: 18, 20.0f1
- Благодарил (а): 23 раза
- Поблагодарили: 3 раза
- Контактная информация:
-
- professor
- Сообщения: 3393
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 172 раза
- Контактная информация:
Re: Слишком быстрая запись в файл
Очевидно, что такие объёмы вы создаёте сами :)Sergey Puzanov писал(а): ↑23 июл 2021, 14:28 Собственно вопрос - откуда берутся такие объёмы? Спасибо.
запись.png
У вас в цикле "бесконечно" быстро пишется содержимое массива (через локальную переменную). Откуда появляется этот массив, не понятно, да это и не важно. Важно то, что будь в нём хоть один элемент (= массив НЕ пустой), то это значение пишется и пишется в файл.
Если (подозреваю, что именно так) вам нужно писать только приходящие значения, то нужно лили какие-то флаги/семафоры использовать, или через очередь отправлять на запись.
Если же нужно периодически писать текущее значение массива (независимо от его обновления), то поставьте задержку в цикле.
Доп: цикл в цикле - плохая идея. В частности, вы не сможете завершить работу программы до выключения записи. А это не юзер-френдли. Нужно чтобы пользователь мог остановить программу в любое время, и если в это время идёт запись, то файл нужно корректно закрыть.
-
- assistant
- Сообщения: 113
- Зарегистрирован: 05 ноя 2020, 08:26
- Версия LabVIEW: 18, 20.0f1
- Благодарил (а): 23 раза
- Поблагодарили: 3 раза
- Контактная информация:
Re: Слишком быстрая запись в файл
Понял, вполне логично, спасибо. Тогда всё же проще будет просто "высчитать" задержку записи через частоту измерений.
Понимаю, но у нас всё делается по инструкции, поэтому обязательно, если уж начал запись, будь добр её сначала завершить, да и сама кнопка останова записи при этой самой записи - единственная активная
-
- professor
- Сообщения: 3393
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 172 раза
- Контактная информация:
Re: Слишком быстрая запись в файл
Может, и проще (но не факт), но не надёжно.Sergey Puzanov писал(а): ↑23 июл 2021, 15:49 Тогда всё же проще будет просто "высчитать" задержку записи через частоту измерений.
Если вдруг запись задержится, и новый пакет прилетит до записи предыдущего, то вы потеряете кусок данных. Если это не критично (что скорее всего именно так, раз у вас UDP), то ок.
Но опять же, раз у вас UDP, то и нет гарантии, что это уже новый кадр, так что вы будете писать повтор.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 12 Ответы
- 576 Просмотры
-
Последнее сообщение Sergey Puzanov
-
- 4 Ответы
- 940 Просмотры
-
Последнее сообщение jane_wild