Russian Qt Forum
Ноябрь 22, 2024, 16:05
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Общий
>
Запись повторяющихся данных в файл
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Запись повторяющихся данных в файл (Прочитано 10120 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Запись повторяющихся данных в файл
«
:
Июль 07, 2017, 08:17 »
Добрый день
В файл пишутся данные "кадр за кадром". Может запишем всего 1 кадр, но может и 1000 и более. Известно что многие данные "статичны" т.е. одни и те же для всех записываемых кадров. Конечно "писать все и всегда" надежно, а главное - работы меньше (обычно в таких случаях приплетается "преждевременная оптимизация"). Но все же это не есть хорошо. Ну так как бум оптимизировать?
Спасибо
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Запись повторяющихся данных в файл
«
Ответ #1 :
Июль 07, 2017, 11:37 »
Тагами. Каждый фрейм снабжен тагом (типом) "полный фрейм" или "повтор кадра".
Есть более сложный вариант с "хардлинками", когда есть два тага "данные" и "линк". Таг "данные" хнанит после себя кадр. "Линк" ссылается на место в файле, где лежит таг "данные". Так можно будет переиспользовать кадры, записанные ранее (но надо где-то отдельно хранить мапу ид/хэш кадра -> место в файле)
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Запись повторяющихся данных в файл
«
Ответ #2 :
Июль 07, 2017, 12:07 »
Ну "одинаковые кадры" хотя и возможны но редко. А вот те или иные данные (в разных кадрах) повторяются очень часто.
Цитата: Авварон от Июль 07, 2017, 11:37
"Линк" ссылается на место в файле, где лежит таг "данные". Так можно будет переиспользовать кадры, записанные ранее
Да, это решает одну задачу - резко сокращает размер файла данных. Но вот скорость загрузки не только не возрастает, а возможно и наоборот, несколько упадет из-за частых seek'ов. А хотелось бы...
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Запись повторяющихся данных в файл
«
Ответ #3 :
Июль 07, 2017, 12:10 »
Ладно, задам вопрос - файл пишется поточно или на момент записи известны все фреймы?
Записан
deMax
Хакер
Offline
Сообщений: 600
Re: Запись повторяющихся данных в файл
«
Ответ #4 :
Июль 07, 2017, 12:17 »
Это видеонаблюдение - где на фоне статичной картинки что то мелькает, и можно статичную картинку поксорить с остальными кадрами, а потом пожать черный фон в "пару килобайт"?
(раз в час обновлять с учетом день-ночь; дождь снег молнии правда заспамят)
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Запись повторяющихся данных в файл
«
Ответ #5 :
Июль 07, 2017, 12:29 »
Цитата: Авварон от Июль 07, 2017, 12:10
Ладно, задам вопрос - файл пишется поточно или на момент записи известны все фреймы?
Кадр за кадром, следующий неизвестен. Но для многих данных известно будут ли они меняться (от кадра к кадру) или нет.
Цитата: deMax от Июль 07, 2017, 12:17
Это видеонаблюдение - где на фоне статичной картинки что то мелькает, и можно статичную картинку поксорить с остальными кадрами, а потом пожать черный фон в "пару килобайт"?
(раз в час обновлять с учетом день-ночь; дождь снег молнии правда заспамят)
Ну почему обязательно "видео"? Это пока данные для рендера, до видео еще далеко
Данные обычные (структуры, контейнеры и.т.п.)
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Запись повторяющихся данных в файл
«
Ответ #6 :
Июль 07, 2017, 13:18 »
Цитата: Igors от Июль 07, 2017, 12:07
Но вот скорость загрузки не только не возрастает, а возможно и наоборот, несколько упадет из-за частых seek'ов. А хотелось бы...
Это почему? Ничего она не упадет. Данные кадра нужно читать один раз, а дальше шарить их в памяти, а не сикать и перечитывать.
«
Последнее редактирование: Июль 07, 2017, 14:12 от Old
»
Записан
deMax
Хакер
Offline
Сообщений: 600
Re: Запись повторяющихся данных в файл
«
Ответ #7 :
Июль 10, 2017, 08:18 »
Для начала нужно вообще проверить что это узкое место, сикать с винта. Я с винта "сикал" по гигабайтам данных, загружая мегабайты, работало более чем достаточно(это еще винт не ssd был).
p.s. а то будет экономия на спичках, хитрый кэш в памяти(если вдруг ваш файл в озу не уместиться - хотя сейчас и по 32Гига памяти есть).
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Запись повторяющихся данных в файл
«
Ответ #8 :
Июль 10, 2017, 08:38 »
Цитата: deMax от Июль 10, 2017, 08:18
Для начала нужно вообще проверить что это узкое место, сикать с винта. Я с винта "сикал" по гигабайтам данных, загружая мегабайты, работало более чем достаточно(это еще винт не ssd был).
Ой спасибо, кэп, что Вы это объяснили! А то сидим тут, и вот просто от нечего делать выдумываем задачи которые не очень-то и нужны
Цитата: deMax от Июль 10, 2017, 08:18
p.s. а то будет экономия на спичках, хитрый кэш в памяти(если вдруг ваш файл в озу не уместиться - хотя сейчас и по 32Гига памяти есть).
Приложение-читатель отслеживает кол-во используемой памяти своими средствами. Если памяти не хватает, то кэши должны быть выброшены и данные должны повторно грузиться с диска (хотя это и медленнее)
Данные НЕ константны, после загрузки они могут меняться всяко-разно (хотя загружалось одно и то же).
Записан
deMax
Хакер
Offline
Сообщений: 600
Re: Запись повторяющихся данных в файл
«
Ответ #9 :
Июль 10, 2017, 09:17 »
Цитата: Igors от Июль 10, 2017, 08:38
Ой спасибо, кэп, что Вы это объяснили! А то сидим тут, и вот просто от нечего делать выдумываем задачи которые не очень-то и нужны
Я написал исходя из этого:
Цитата: Igors от Июль 07, 2017, 12:07
Да, это решает одну задачу - резко сокращает размер файла данных. Но вот скорость загрузки не только не возрастает, а возможно и наоборот, несколько упадет из-за частых seek'ов. А хотелось бы...
То что скорость рендомного доступа раз так в 100 ниже для обычного HDD и так понятна, но может у вас будут редко промахи мимо кэша винта. Протестить для начала неплохо бы, а то я тоже пару раз занимался оптимизацией, а потом понял что сэкономил на спичках.
Если ваших данных меньше чем кеш винта - забить на оптимизацию, линукс кэширует винт(и ваших данных меньше свободного озу) - аналогично.
Ваши данные влезают в ОЗУ - загрузить все в ОЗУ.
Ваши данные не влезают в ОЗУ, а вот тут можно пообсуждать и немного подумать.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Запись повторяющихся данных в файл
«
Ответ #10 :
Июль 10, 2017, 09:58 »
Цитата: deMax от Июль 10, 2017, 09:17
То что скорость рендомного доступа раз так в 100 ниже для обычного HDD и так понятна, но может у вас будут редко промахи мимо кэша винта. Протестить для начала неплохо бы, а то я тоже пару раз занимался оптимизацией, а потом понял что сэкономил на спичках.
Если ваших данных меньше чем кеш винта - забить на оптимизацию, линукс кэширует винт(и ваших данных меньше свободного озу) - аналогично.
Ваши данные влезают в ОЗУ - загрузить все в ОЗУ.
Ваши данные не влезают в ОЗУ, а вот тут можно пообсуждать и немного подумать.
Типичная ситуация - вроде бы ответ разумен, но... ничего кроме раздражения у ТС он не вызывает
Потому что вместо того чтобы "как решать задачу" Вы начинаете обсуждать "а нужно ли ее решать?". Разумеется сразу же требуются (многочисленные) технические подробности, разговор уходит в сторону и затухает. Рез-т? Ноль.
Так вот, давайте примем без всяких доказательств что задачу решать НАДО. Возможно Вы в 100 раз умнее меня, но свою задачу я знаю в 100 раз лучше, поэтому мне виднее. И вот что
Цитата: deMax от Июль 10, 2017, 09:17
Если ваших данных меньше ..
Ваши данные влезают ..
Ваши данные не влезают ...
А почему Вы думаете что (примерный) объем данных известен? Для порядочных задач это обычно не так, и способность приложения обрабатывать большие объемы данных (пусть и медленнее) и является "показателем класса". А то тупенько вылететь по std::bad_alloc всякий может.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Запись повторяющихся данных в файл
«
Ответ #11 :
Июль 10, 2017, 17:03 »
Цитата: deMax от Июль 10, 2017, 09:17
Если ваших данных меньше чем кеш винта - забить на оптимизацию, линукс кэширует винт(и ваших данных меньше свободного озу) - аналогично.
Ваши данные влезают в ОЗУ - загрузить все в ОЗУ.
Ваши данные не влезают в ОЗУ, а вот тут можно пообсуждать и немного подумать.
Я бы был ооочень осторожен в таких высказываниях
Есть один маленький противный нюанс: никто заранее не знает, сколько ОЗУ на целевой машине, какой винт, какая ось, ну и еще там фиг знает, какие условия.
Поэтому "забить" - это для студенческого проекта можно, а вот для чего-либо более серьезного уже не прокатит
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Запись повторяющихся данных в файл
«
Ответ #12 :
Июль 10, 2017, 17:56 »
Цитата: Igors от Июль 10, 2017, 09:58
Так вот, давайте примем без всяких доказательств что задачу решать НАДО. Возможно Вы в 100 раз умнее меня, но свою задачу я знаю в 100 раз лучше, поэтому мне виднее. И вот что
Ну так чем два предложенных решения не устраивают?
Записан
deMax
Хакер
Offline
Сообщений: 600
Re: Запись повторяющихся данных в файл
«
Ответ #13 :
Июль 11, 2017, 08:34 »
Цитата: Racheengel от Июль 10, 2017, 17:03
Поэтому "забить" - это для студенческого проекта можно, а вот для чего-либо более серьезного уже не прокатит
Или для прототипа. Если это не древний хлам то у винта кэш от 32Мб(и скорее всего винт ssd), и озу >4Gb.
Можно еще системные требования написать.
Мы то не знаем объемы данных, может это пару метров(на которые можно положить seek) , а может и эксабайты (где QMap уже не поможет и придется БД использовать или еще что более хитрое).
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Запись повторяющихся данных в файл
«
Ответ #14 :
Июль 11, 2017, 10:53 »
Цитата: Авварон от Июль 10, 2017, 17:56
Ну так чем два предложенных решения не устраивают?
Сказать что-то в тему - еще не решение
Цитата: Racheengel от Июль 10, 2017, 17:03
Есть один маленький противный нюанс: никто заранее не знает, сколько ОЗУ на целевой машине, какой винт, какая ось, ну и еще там фиг знает, какие условия.
Поэтому "забить" - это для студенческого проекта можно, а вот для чего-либо более серьезного уже не прокатит
Вот, товарищ понимает. Добавлю что часто только такими "маленькими подробностями" и отличается профессиональный софт от бесплатного.
Цитата: deMax от Июль 11, 2017, 08:34
Если это не древний хлам ..
Опять гоняем порожняк - винт, озу (шмотье, музон)
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...