Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите с выбором класса STL! 
:(
    Опции темы
ary
Дата 15.4.2008, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.4.2008

Репутация: нет
Всего: нет



 MFC  аппликация(SDI) динамически отображает сигналы,получаемые с порта ,в виде разноцветного графика. 

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

ПРОБЛЕМА:Когда клиент загружает файл графика с диска ,то перед его отрисовкой всегда идет очень длинная пауза. 
Как видно,медленное считывание из CMap ( lineMap.Lookup(..)) тормозит процесс. 

Я хочу попробовать вместо MFC-шного CMap использовать STL::map или другой контейнер STL. 
 
ВОПРОС К ЗНАТОКАМ:какой из контейнерных классов STL дает самое быстрое считывание из памяти в данной ситуации?

Это сообщение отредактировал(а) ary - 15.4.2008, 20:11
PM MAIL   Вверх
Rapalex
Дата 15.4.2008, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Задержка не в CMap 100%
У тебя сколько объектов?


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
ary
Дата 15.4.2008, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.4.2008

Репутация: нет
Всего: нет



Цитата

У тебя сколько объектов?
В смысле в CMap?Там тысячи об'ектов -вершин графика ,каждый из которых содержит 3 целых числа:координаты вершины и ее цвет.
PM MAIL   Вверх
Rapalex
Дата 15.4.2008, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



кста, в релизе будет на порядок шустрее.


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
vinter
Дата 15.4.2008, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 4
Всего: 56



Цитата(ary @  15.4.2008,  21:10 Найти цитируемый пост)
ВОПРОС К ЗНАТОКАМ:какой из контейнерных классов STL дает самое быстрое считывание из памяти в данной ситуации?

неправильная постановка задачи. Читают все быстро, вопрос в другом как осуществляется доступ(произвольно, последовательно) есть ли требования в сортировке etc. Формулируй вопрос правильно.


--------------------
Мой блог
PM MAIL WWW   Вверх
ary
Дата 15.4.2008, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.4.2008

Репутация: нет
Всего: нет



при сериализации об'ект lineMap класса CMap заполняется данными из загруженного файла.
А я его в OnPaint() отрисовываю;какой доступ у CMap функции Lookup-кажется произвольный ..Сортировка не нужна.
Код

void CGraph123View::OnPaint()
{
    
CPaintDC dc(this);

if(!sfp->lineMap.IsEmpty() &&  sfp->Step<10)
 {

               CRect wrct;
               GetClientRect(wrct) ;   
               int xmax=wrct.Width();
            
    
               COLORREF color = RGB(255, 255, 255);
 

                int count=(int)sfp->lineMap.GetCount();

                for (int i=1;i<=count;i=i+2)
               { 


                   sfp->lineMap.Lookup( i, cedge );         
                   pparr[0]=cedge.point;
                   pparr[0].x=pparr[0].x-offset; 

                   CPen pen(PS_SOLID,1,cedge.color);
                   dc.SelectObject(&pen);

                  sfp->lineMap.Lookup( i+1, cedge );

                  pparr[1]=cedge.point;
                  pparr[1].x=pparr[1].x-offset; 

                  prevPoint = pparr[1];
                

                  dc.Polyline(pparr,2);

    
        
    }


Это сообщение отредактировал(а) ary - 15.4.2008, 20:51
PM MAIL   Вверх
vinter
Дата 15.4.2008, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 4
Всего: 56



если CMap это ассоциативный массив, то у тебя две альтернативы map и multimap. А вообще по идее твой цикл надо убрать из OnPaint.


--------------------
Мой блог
PM MAIL WWW   Вверх
Rapalex
Дата 15.4.2008, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Цитата

Там тысячи об'ектов -вершин

ХА, тогда есть спасение.
Юзай:
Код

CArchive::SetLoadParams
CArchive::SetStoreParams

Мне с параметрами по умолчанию помогло.

Добавлено через 2 минуты и 59 секунд
Думаю разберёшся когда какую вызывать ;)

Это сообщение отредактировал(а) Rapalex - 15.4.2008, 21:01


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
ary
Дата 16.4.2008, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.4.2008

Репутация: нет
Всего: нет



Всем спасибо.Проблема была в том,что я забыл сделать иницииализацию хэша.Сейчас работает в несколько раз быстрей.
PM MAIL   Вверх
Earnest
Дата 18.4.2008, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Интересно, а на кой хрен там вообще хэш... Чем тебя просто список или массив пар не устраивает? 
Посмотрев на это:
Код

for (int i=1;i<=count;i=i+2)
               { 
                   sfp->lineMap.Lookup( i, cedge );  

парктически умерла - хэш-таблица по индексу! В чем смысл-то глубокий? Что ускоряем?
Особенно хорош поиск при отрисовке... по индексу! Уж перебирал бы подряд...

Кстати, массив ты мог бы грузить одним куском...


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.