GMSMapView 缓存的瓦片在缩放后保存在内存中,导致内存使用率高和应用程序性能差

GMSMapView cached tiles are held in memory after zooming, leading to high memory usage and bad App performance

在我的应用程序中,我展示了一个显示 GMSMapView 的 ViewController。在应用程序位于前台之前,ViewController 和 GMSMapView 都不应该被关闭,因此 GMSMapView 对象永远不会被释放,并且由于我还显示了 GMSPanoramaView,两者都是非常昂贵的对象,我'我遇到了与高内存使用率相关的性能问题。

应用启动后,初始化 GMSMapView 时,内存使用率相对较低,完全可以满足我的应用要求。

问题是在我放大后出现的,我的内存增加很大,即使在我缩小后也从未被释放。我不确定,但在我看来,SDK 缓存了一些东西,但从未释放过。 在下面的图片中(测试设备:iPhone XR),您可以清楚地看到问题,第一个峰值出现在我缩放时,从那时起内存使用就不会减少,即使缩放级别回到0:

我正在尝试减少与缓存相关的内存使用量(?),但我不知道如何真正做到这一点,甚至不知道如何做到这一点。 根据我对文档的理解,.clear() 方法只影响标记和覆盖。我还注意到 stopRendering() 方法可能有用,但已弃用。

附带说明一下,为了进行一些与 GMSMapView 相关的一般性能改进,我已经将 MapView 属性 .preferredFrameRate 设置为 .conservative 以降低渲染帧速率,并设置 .isBuildingsEnabled = false.isIndoorEnabled = false 以避免无用的缓存。

我的问题是:使用GoogleMaps SDK,是否可以防止上面提到的缓存或在地图缩小后释放内存?如果没有,我还能做些什么来减少与 GMSMapView 相关的高内存使用率?

编辑:这可能对其他人有用,因此我添加了更多 GoogleMaps SDK 优化技巧。我正在使用自定义地图样式,根据我的个人经验,我发现使用 Cloud-based Map Styling(目前处于测试阶段)在渲染地图图块方面比经典的 .mapStyle = try GMSMapStyle(contentsOfFileURL: file) 方法要快一些。

经过一些研究,我发现存在一个关于高内存使用率的未解决问题:https://issuetracker.google.com/issues/35826246。 这是 6 年前打开的,不确定它是否会被解决,Google 感到羞耻。 除了给问题加注星标并希望得到解决之外,没什么可做的。