![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Форумчанин
Регистрация: 28.04.2009
Сообщений: 186
|
![]()
Первый раз столкнулся с тем, что С++ не имеет прямого функционала для решения проблемы. Приходится придумывать обходной путь. Но он тоже достаточно тернистый.
Суть проблемы: в программе создается невероятно большой массив (счет на гигабайты оперативки) объектов класса под названием CurrentState (Это класс, характеризующий состояние системы в момент времени t). Соответственно, пытаюсь как-то обойти эту проблему. Пришлось создать 10 классов, унаследованных от CurrentState, потому что во время работы программы пользователь сам решает какие наборы параметров, характеризующих состояние системы ему интересны. Т.е. пользователь дефакто выбирает какие из этих 10 классов ему интересны. Хотелось бы каким-нибудь образом сгенерировать класс с множественным наследованием от выбранных классов. Динамически. Есть какие-нибудь мысли? Я вот пошел по пути создания нового класса, который в зависимости от выбора пользователя создает объекты соответсвующих классов. Но там возникают сложности с приведением типов.
Ruft ihm es zu durch alle Land', Der durch dies Wunder Gnade fand!
Hoch uber aller Welt ist Gott, Und Sein Erbarmen ist kein Spott |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
![]()
Возможно, стоит отказаться от ООП, и работать с сырой памятью. Допустим, первый байт ячейки представляет собой битовую маску, определяющий, какие данные хранятся в текущем элементе. Для ускорения поиска по массиву можно сделать таблицу соответствия [первый байт] -> [размер ячейки]. А можно размер хранить отдельно - будет быстрее, но менее экономно.
P. S. union-ы иногда позволяют экономить оперативку. Последний раз редактировалось ds.Dante; 08.02.2010 в 18:29. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 28.04.2009
Сообщений: 186
|
![]()
Данте, я только въехал в ООП - не готов отказаться)
Вроде я придумал нормальный способ. Сейчас создам тему с конкурсом на подобную задачу.
Ruft ihm es zu durch alle Land', Der durch dies Wunder Gnade fand!
Hoch uber aller Welt ist Gott, Und Sein Erbarmen ist kein Spott |
![]() |
![]() |
![]() |
#4 | |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
![]() Цитата:
А совет ds.Dante я вообще считаю самым лучшим решением данной задачи. К тому же вам понадобится только один класс-парсер, который будет разбирать битовую маску и выводить в объект класса состояния системы. |
|
![]() |
![]() |
![]() |
#5 | ||
Старожил
Регистрация: 22.05.2007
Сообщений: 9,087
|
![]() Цитата:
Цитата:
Я бы создал класс-контейнер характеристик. И в нём массив этих самых характеристик. Поставил пользователь галочку - добавилась характеристика в массив. Убрал - удалилась. Другой вопрос как это потом всё обрабатывать и как узнать какая характеристика есть, а какой нет. Всё это решается, но реализация зависит от задачи. |
||
![]() |
![]() |
![]() |
#6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Чесно говоря я бы для обработки такого кол-ва данных пихнул бы их в БД, и пусть уже MS SQL ну или другая СУБД сама разбирается с ними, думаю скорость работы программы заметно повысилась бы. Да и выборки они умеют делать лучше чем бы ты написал.
I'm learning to live...
|
![]() |
![]() |
![]() |
#7 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
![]()
Ага, а если каждую секунду нужно добавлять и получать данные? БД с таким врядли справится.
|
![]() |
![]() |
![]() |
#8 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
![]()
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,087
|
![]()
Ну тут зависит от природы данных. Может это данные с каких-нибудь датчиков, которые добавляются каждую секунду и по этим данным строятся графики. Если это более или менее статичные данные, то может и СУБД есть смысл подключать. Тут скорее вопрос не в том: справится ли СУБД, а в том: нужно ли сливать данные в БД, а потом их же оттуда читать.
|
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
![]()
Я как раз сейчас работаю над программой, которая записывает данные с датчиков (именно каждую секунду, и по ним строятся графики), и объём накопленных данных достигает сотен мегабайт. Только у меня уже есть стандартный формат файла, в котором все поля имеют одинаковый размер.
Самый интересный кусок работы - чтение такого файла. Буду использовать WinAPI-шное проецирование файлов в память, которое позволяет относительно быстро работать с файлами, даже если они больше размера оперативки. Плюс кеширование за счёт холостого чтения данных (буду предугадывать, каких именно). Кстати, БД используются, но немного другим боком: работа с данными и визуализация разделены на два модуля, работающие по схеме провайдера/потребителя. Я как раз пишу модуль работы с данными. Парсифаль, лучше придумай какую-нибудь задачу, более требовательную к ООП, например, написать графический интерфейс в OpenGL (типа как в современных игрушках). Что касается той задачи, возможно, проецирование файлов станет простейшим решением. Про это можно почитать у Рихтера. Последний раз редактировалось ds.Dante; 09.02.2010 в 15:15. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Паскаль.Использование множественного типа | **star** | Помощь студентам | 9 | 21.11.2009 16:44 |
Проблема в программе на С++, множественное исполнение цикла | Vikelf | Помощь студентам | 1 | 25.05.2009 09:31 |
Множественное наследование | Crucian | Общие вопросы Delphi | 1 | 29.12.2008 14:26 |
Множественное перемещение в двух таблицах | Arteom | БД в Delphi | 7 | 16.07.2008 16:59 |