2016-03-23 18 views
1

ol.render.canvas.ReplayGroupオブジェクトに問題があり、ガベージコレクションに移されていません。Openlayers 3 - Canvas ReplayGroupオブジェクトをガベージコレクトするには?

これが対象とするレイヤーは、ol.source.ImageVectorから作成されたol.layer.Imageで、ol.source.Vectorソースから作成されます。

いくつかのガベージコレクションを実行したいイベントのシーケンスは、 イメージのスタイルがsetStyle(null)でnullに設定されています。 次に、ImageのソースはsetSource(null)でnullに設定されます。 次に、ol.layer.ImageオブジェクトがsetMap(null)でマップから削除されます。

これは、マップからレイヤーが削除されてしまう(私は消えてしまう)と思いますが、Chromeのヒープ割り当てプロファイルを使用してウェブページをプロファイルすると、canvas.ReplayGroupオブジェクトはまだ使用されています。

他の誰かがこれに遭遇したことはありますか?私は同じ結果をlayer.setMap()の代わりにmap.addLayer()を使用しようとしました。私が書くのを忘れ

==編集==

、ol.layer.Imageはol.layer.Groupに追加されました。具体的には、上記の最後の部分はmap.addLayer(group)とgroup.getLayers()。forEach(function(l){l.setMap(map);})です。 ol.layer.Imageのためのソースですol.source.ImageVectorで

答えて

1

https://github.com/openlayers/ol3/blob/master/src/ol/source/imagevectorsource.js

、私はreplayGroup_と呼ばれるリプレイグループクラスへの参照を見つけました。レイヤーソースをnullに設定した後にその 'private'プロパティをnullに設定すると、ガベージコレクションが行われます。

var imageVector = layer.getSource(); 
layer.setSource(null); 
imageVector.setStyle(null); 
imageVector.replayGroup_ = null; 
imageVector = null; 

これは今

のために私の作品
関連する問題