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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: destroy() не освобождает память?  (Прочитано 9936 раз)
Slash
Гость
« Ответ #15 : Март 17, 2017, 17:29 »

Вот пример цикла в qml:
Код:
function allocateObject(parent) {
    var component = Qt.createComponent("TestComponent.qml");
    for(var i = 0 ; i < 30000 ; i++) {
        var object = component.createObject(parent);
        object.destroy()
    }
}

А сам TestComponent.qml
Код:
import QtQuick 2.7

Item {
    property string name: "item"
}

Вызов allocateObject съедает 40Mb памяти, которая по истечении времени так и не освободится. Повторный вызов съедает еще 13Mb. Тут для примера взят совсем примитивный компонент. В реальности компонент намного сложнее. И конечно не 30000 их создается.
И как же тогда быть с памятью?
Записан
andrew.k
Гость
« Ответ #16 : Май 02, 2017, 23:16 »


Вызов allocateObject съедает 40Mb памяти, которая по истечении времени так и не освободится. Повторный вызов съедает еще 13Mb. Тут для примера взят совсем примитивный компонент. В реальности компонент намного сложнее. И конечно не 30000 их создается.
И как же тогда быть с памятью?

Objects are not destroyed the instant destroy() is called, but are cleaned up sometime between the end of that script block and the next frame (unless you specified a non-zero delay).
Может попробовать?
Код
C++ (Qt)
object.destroy(0);
Записан
twp
Гость
« Ответ #17 : Май 03, 2017, 15:40 »

Есть еще функция
Цитировать
gc() function: This function is specific to QML, and provides a way to manually trigger garbage collection
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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