![]() |
|
|
![]()
|
|
| Svoin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
Народ, передо мной стоит задача нарисовать дерево по xml файлу. Я это сделал - дерево рисуестя, все как надо. НО, как всегда это "но", если я возьму большой xml файл ( более 2МБ ), то прога просто зависает и памяти ест столько!!. Можно ли в mfc нарисовать чать дерева, отобразить его для пользователя, освободить память и рисовать дальше (в памяти), ну естесственно потом все это повторять. Т.е. чтоб пользователь мог видеть процесс работы проги.
Еще было бы круто сделать второй поток. который позволили бы юзеру просматривать уже нарисованное дерево. Или это совсем сьест память? ЗЫ. Всем спасибо за ответ ) |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Svoin, что ты подразумевашь под деревом?(просто здесь люди по всякому вопросы задают
-------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Svoin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
Да
Сорри что не пояснил |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Можно поинтересоваться-каким способом ты заполняешь(создаеш) ветки?
А проводник как работает в Windows Вообше-где ты память выделяешь? Короче вылаживай часть кода.. Это сообщение отредактировал(а) Coocky - 5.7.2006, 11:03 -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Svoin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
В общем, я юзаю написанную когда- то SAX parsing, который читает теги xml'я и создает статус типа: старт тэг, текст, коммент, энд тэг... и т.д. Все это делает парсинг.
Я создал класс который вылавливает этот статус и там рисует дерево, что то в этом духе:
Хотелось бы, например, при статусе EndTag добавить код для отображения дерева пользователю в диалоговом окне Добавлено @ 11:15 как то много получилось, надеюсь понятно будет Это сообщение отредактировал(а) Svoin - 5.7.2006, 11:42 |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Для понятности есть тег Код на форуме (справа в верху) Сейчас я переведу сам
Добавлено @ 11:25 Глянул Честно сказать -страшновато вопросы 1. Куда указывает ссылка CTreeCtrl & m_Leaf Стремный фрагмент кода -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Svoin |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
Ну естественно все это рисуется в каком то диалоговом окне, в котором и лежит контрол
В классе этого диалогового окна и происходит инициализация DDX_Control(pDX, IDC_XML_TREE, m_Tree) а также ImageList там и происходит создание обектов классов для работы с деревом
ЗЫ
|
||||
|
|||||
| Dart |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 26.6.2006 Где: Саратов, РФ Репутация: 2 Всего: 2 |
Се ля ви Деревья виртуальными не сделаешь. Для них необходимо хранение в памяти всей информации. Создай поток и заполняй свое дерево в потоке. В этом случае юзверь сможет просматривать то, что уже прочитал твой парсер. --------------------
ЦитатаЛюблю смотреть, как другие работают Дж. К. ДжеромСайт: www.ecosigma.ruПочта: [email protected] |
|||
|
||||
| Svoin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
К сожелению mfc знаю мало, это мне тут здуру такой таск подкинули т.к. мой парсинг, так что можно поподробнее о потоках и как это все реализавать?
|
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Это спасет только от зависания приложения. Другое дело-утечка памяти.... Можно, но форуме-куча тем про это. Поищи пока, разбирись. -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Svoin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
А это как исправить? вообще реально? |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Ну конечно! Только если ты не путаешь утечку памяти с реальным использованием памяти самого CTreeCtrl -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Svoin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
С трудом понимаю что-нибуть счас. Короче.
Когда парсинг запускаеш в консоле - память минимум, но и вид никакой того что там выводится, поэтому и было сделано это мфсишное приложение. Запускаеш маленький файлик - все кульно - 6Кб берет памяти (смотрю в таск менеджере ). Запускае большой файл - и полетело... зависон и 70Кб По логике это дерево память ест, сам парсинг элементарен, в этом плане, до безобразия Это сообщение отредактировал(а) Svoin - 5.7.2006, 12:05 |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Ты пойми, что CTreeTrl- это обьект, и эму тоже нужна память для хранения информации. Если ты напарсил на 70 кБ и сохранил, то там оно и будет. Вообще для начала найди прмер простенький с деревом(у меня под рукой нет сейчас). В инете их куча. Посмотри, поюзай. Попробукй вставить свой парсинг . Иначе будем долго потеть. Вообще утечка памяти в студии определяется одним из простых методов (не самым эффективным). Нажимаешь F5, юзаешь прогу, а затем закрываеш ее.. И смотришь в окне отладчика. Если видишь надпись Detected memory leak! значит есть утечка. Он там еще блоки показывает. Пока остновись на этом -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Svoin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
Так в этом то и сосоял вопрос. Можно ли в процессе рисования отобразить чать дерева, освободить память и рисовать в памяти следующий блок
|
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Конечно нет... Виртуальный список как таковой существует только для ListCtrl -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Svoin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
Ладно, спасибо, пойду пока разбиратся с тем что ты мне ранее говорил, будут вопросы - задам
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Можно не запихивать всю информацию в дерево сразу, а использовать CALLBACKs, особенно I_CHILDRENCALLBACK:
Т.е. дерево "линейными" кусками строить нельзя, но можно - иерархически: сначала внешние итемы, а потом, по мере раскрытия пользователем достраиваются внутренние (по запросу). Еще можно точно также работать с текстом и картинками - через CALLBACK. Это слегка сэкономит память. -------------------- ... |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Да, действительно. Но сейчас главное узнать, есть ли у него реальная утечка -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Svoin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
||||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
У меня - нет. Но по описанию возможность такая существует. Попробуй поискать на codeproject, проблема больших деревьев наверняка не у одного тебя возникала.
-------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |