Обновление геометрии утечки памяти - ArcGis Runtime .Net

Я работаю с ArcGis Runtime SDK для .Net v10.2.5.

У меня есть сокет UDP, прослушивающий и ожидающий данных изображения, которые запускают функцию, выполняемую в другом потоке в фоновом режиме.

Я хочу нарисовать изображение на эллипсе произвольного радиуса, поэтому я использую

var filestream = System.IO.File.Open(imagepath, FileMode.Open, FileAccess.Read);
MapPoint point = new MapPoint(center.longitude, center.latitude, SpatialReferences.Wgs84);

var polySymbol = new Esri.ArcGISRuntime.Symbology.PictureFillSymbol();                    
await polySymbol.SetSourceAsync(filestream);

var param = new GeodesicEllipseParameters(point, 25, LinearUnits.Meters);
var ellipse = GeometryEngine.GeodesicEllipse(param);

***//HERE IS THE PROBLEM***   
_graphicsLayer.Graphics.Clear();
_graphicsLayer.Graphics.Add(new Graphic { Geometry = ellipse, Symbol = polySymbol });

Это делается ~ 5 раз в секунду. Несмотря на то, что я очищаю слой на каждой итерации, существует утечка памяти, которая увеличивает использование памяти до сбоя приложения.

Я читал о проблемах с памятью, используя ArcGIS и процесс Geometry, поэтому я не уверен, что я упираюсь в стену или просто делаю что-то плохо.

Я также попытался перезаписать геометрию без очистки:

//this is the problematic line, if i comment that, memory doesn't increase.
_graphicsLayer.Graphics[0].Symbol = polySymbol;

_graphicsLayer.Graphics[0].Geometry = ellipse;

И используя оператор stream, файловый поток правильно закрывается в конце, но используемая оперативная память продолжает увеличиваться до тех пор, пока приложение не выйдет из строя.


person Nak    schedule 25.08.2015    source источник


Ответы (1)


Я бы сохранил PictureFillSymbol в словаре по имени файла и повторно использовал символ, а не создавал новый при каждом обновлении. Изменение символа и геометрии, вероятно, лучший способ сделать это, а не создавать каждый раз новую графику.

person user1152516    schedule 04.12.2015