2017-03-12 10 views
0

私は大きいモデルのListViewとデリゲートのCanvasを持っています。スクロールすると、新しい代理人が作成され、期待どおりに削除されますが、RAMは解放されません。ある時点で、iOSによってアプリケーションが殺されます。 どちらもQPixmapCache::clear()でもQJSEngine::collectGarbage()でもQQmlEngine::trimComponentCache()でもありません。記憶を解放する方法はありますか?QMLキャンバスクリア画像キャッシュ

ここには最小の例があります(qmlsceneで実行できます)。上下にスクロールし、RAMの消費量がアップ

import QtQuick 2.6 

ListView { 
    width: 320 
    height: 480 
    model: 1000 
    delegate: Canvas { 
    id: canvas 
    width: parent.width 
    height: width 

    onPaint: { 
     var ctx = getContext("2d") 
     ctx.strokeStyle = "red" 
     ctx.lineWidth = 2 
     ctx.beginPath() 
     for (var i = 1; i < 20; ++i) { 
     ctx.lineTo(Math.random() * canvas.width, Math.random() * canvas.height); 
     } 
     ctx.stroke(); 
    } 
    } 
} 

QTBUG-59467

+0

代理人のコード例を投稿してもらえますか? –

+0

qtquickはメモリ不足です。メモリが制限されていて、アプリケーションが大量のデータを読み込んだ場合、それは貧しい選択です。 – dtech

+0

@AdrienLeravatは最小の例を追加しました – psyched

答えて

0

を行く参照メモリ消費量はQtQuick程度の定期的なトピックである、とあなたはdocumentationに、いくつかのリードと戦略を見つけることができます。それは時間が経つにつれて改善されたので、最初の勧告はもちろん最新のバージョンを使用することです。

すべての最適化については、QtQuick profilerおよび/またはGammaRayを参照して、メモリ使用量の原因を理解することをおすすめします。

特にListViewについては、ListViewというcacheBufferプロパティを試してみることもできますが、問題を解決するには、問題の原因に応じてデリゲートやアプリケーションを軽くする必要があります。


EDIT:あなたのチケットQTBUG-59467のコメントで強調されているように明らかにあなたのケースでは、これが続くことを、実際のメモリリークです!

+0

非常にメモリが要求されるアプリケーションの精巧なテストに基づいて「時間が経つにつれて大幅に改善されました。 5.8は特にメモリ節約をもたらすと考えられていましたが、同じテストでは5.7と比べて約5%のメモリが使用されています。 – dtech

+0

それは、メモリ使用量と管理を別々に比較して、比較するバージョンに関連しています。しかし、私はあなたのポイントを得る、私はより中立に私の答えを編集しました。 –

関連する問題