Russian Qt Forum
Май 06, 2024, 20:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Утечка памяти в QFileDialog  (Прочитано 5533 раз)
Maz
Гость
« : Октябрь 04, 2006, 14:04 »

Если написать следующий кусок кода:

Код:

    QString s = QFileDialog::getOpenFileName(
                    this,
                    "Choose a file to open",
                    "/home",
                    "Images (*.png *.xpm *.jpg)");


то при закрытии не вся память освождаеться. Это видно в таск менеджере.
QT 4.1.4, коммерческая версия.
У кого-то были еще такие проблемы?
Записан
Hordi
Гость
« Ответ #1 : Октябрь 04, 2006, 14:36 »

А с чего ты решил, что это утечка?
Записан
Maz
Гость
« Ответ #2 : Октябрь 04, 2006, 16:23 »

Потому что до создания диалогf в программе было, допустим, 45
объектов  GDI (при этом программа занимала 13 220 байт памяти), после создания диалога стало 145 объктов GDI (при этом программа занимает 15 400 байт памяти).
После закрытия диалога, как я понимаю, количество объектов GDI должно стать обратно 45, но нет, половина объктов не удаляеться и их становиться где-то 80.
Если этот диалог открывать и закрывать много раз подряд, то занимаемый объем памяти программой растет, и все время увеличиваеться количество объктов GDI.
По-моему это утечка.
Записан
Вячеслав
Гость
« Ответ #3 : Октябрь 04, 2006, 17:24 »

Цитата: "Maz"
Потому что до создания диалогf в программе было, допустим, 45
объектов  GDI (при этом программа занимала 13 220 байт памяти), после создания диалога стало 145 объктов GDI (при этом программа занимает 15 400 байт памяти).
После закрытия диалога, как я понимаю, количество объектов GDI должно стать обратно 45, но нет, половина объктов не удаляеться и их становиться где-то 80.
Если этот диалог открывать и закрывать много раз подряд, то занимаемый объем памяти программой растет, и все время увеличиваеться количество объктов GDI.
По-моему это утечка.

Ну сразу после закрытия - оно может и не освободиться - лови момент когда деструктор отработает...
Записан
Alex03
Гость
« Ответ #4 : Октябрь 04, 2006, 17:40 »

Какой деструктор у статического метода? Впрочем создаваемый объект как минимум временно в дети к this прописывается.

Открываете закрываете диалог в одном цикле? Или ещё сами чёнить делаете?
ОС какая?
Записан
Maz
Гость
« Ответ #5 : Октябрь 04, 2006, 17:44 »

Цитата: "Alex03"
Какой деструктор у статического метода? Впрочем создаваемый объект как минимум временно в дети к this прописывается.

Открываете закрываете диалог в одном цикле? Или ещё сами чёнить делаете?
ОС какая?
Просто открываю и закрываю диалог, без каких-либо дальнейших действий.
ОС- WinXp Pro SP2.
Записан
Dendy
Гость
« Ответ #6 : Октябрь 04, 2006, 21:41 »

Только что проверил: в Qt 4.2 такой проблемьІ нет.
Проверял открьІванием множества QFileDialog'ов на новьІх итерациях цикла по сигналу от кнопки.
Записан
Alex03
Гость
« Ответ #7 : Октябрь 05, 2006, 06:38 »

В принципе небольшой захват ресурсов при первом использовании некоей функциональности - явление нормальное ( по крайней мере для qt Улыбающийся ). Например можно запомнить текущий каталог, или там например какойнить comctrl.dll (имя вымышленное) системный подгрузить и так и оставить в памяти.

А вот в случае циклического использования ресурсы есть не должно.
Обрежте приложение до минимума, типа такого псевдокода:

main()
{
    QApplication a;
    while(1)
    {
        QString s = QFileDialog::getOpenFileName(
                    NULL,
                    "Choose a file to open",
                    "/home",
                    "Images (*.png *.xpm *.jpg)")
    }
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.138 секунд. Запросов: 20.