你好,
我们的设备上有一个vtpk文件,我们用它来生成离线模式下的地图。
下面是我们目前使用的代码。我们发现,一旦地图被加载,后台的内存就会不断增加,并且永远不会被释放。
在我们的Xamarin Forms UWP应用程序中,我们在主页和其他几个页面上使用这个地图。当我们在应用程序中导航时,后台的内存不断增长,永远不会释放。
我们进一步研究了这一点,并认为我们从设备上的文件加载平铺层的第6行和第8行,“tilecache”和“vectorTiledLayer”永远不会从内存中删除。我们还查看了是否可以使用IDisposable接口来处理对象,但似乎这两个对象没有实现这个接口。
加载离线vtpk文件而不影响内存的最佳有效方法是什么?
我们下面所做的,这是加载离线文件的标准方式吗?
var mapPackageFolder = Constants.TpkFolderLocation;var mapPackageFile = @" tas_webm_basemap_no_contoury .vtpk";var mapPackagePath = System.IO.Path。结合(mapPackageFolder mapPackageFile);var tileCache = new VectorTileCache(mapPackagePath);vectorTiledLayer = new ArcGISVectorTiledLayer(tileCache);map = new map(new Basemap(vectorTiledLayer));//创建起始视点:startingViewpoint = new viewpoint (-42.882317, 147.327125, 10000);地图。InitialViewpoint = startingViewpoint; return map;
当你说"后台的内存一直在增长,并且永远不会被释放。您是否运行内存分析工具来确定哪些对象占用了内存?你的导航堆栈中可能还有东西还活着。
还要注意,. net垃圾收集器在运行时是相当不确定的,所以它可能实际上没有泄漏,但GC只是没有收集东西。你可以尝试运行这段代码3次,以绝对确保所有可以收集的东西都被收集了:
GC.Collect ();
GC.WaitForPendingFinalizers ();
只是不要经常这样做,因为这是一个阻塞/昂贵的调用,但它是有用的,以确定是否有些东西实际上仍然保持或不。