ARCGIS Runtime for .NET:为什么我得到 System.ArgumentException 'An item with the same key has already been added'?
ARCGIS Runtime for .NET: Why am I getting System.ArgumentException 'An item with the same key has already been added'?
如何诊断上述异常?在我的代码中,我大致执行以下操作:
- 创建叠加层(
overlay = new GraphicsOverlay()
)
- 创建一组多边形(
poly = new Polygon(mappoints)
,其中 mappoints
是 PointCollection
)
- 使用多边形几何图形和每个多边形的简单填充符号创建一个图形
(
graphic = new Graphic() { Geometry = poly, Symbol = new SimpleFillSymbol() { Color = Colors.Red } }
)
- 将该图形添加到叠加层。 (
overlay.Add(graphic)
)
然后,当有变化时,我会调用 overlay.Graphics.Clear()
,然后重复步骤 2-3。
当我这样做时,有时 new Graphic(...)
,我会得到异常(但不是每次)
我正在使用 Esri.ArcGISRuntime 版本 100.0.0.0。
知道发生了什么事吗?
好的,看来问题是因为 overlay.Graphics.Clear()
只是将对象释放给垃圾收集器,而底层的本机对象尚未被释放。
通过强制垃圾收集器 运行:
GC.Collect();
GC.WaitForPendingFinalizers();
这导致对象被释放并消除了 "same key" 异常
这是一个已知错误,我们将在下一次更新中修复。强制 GC 将暂时解决此问题。
如何诊断上述异常?在我的代码中,我大致执行以下操作:
- 创建叠加层(
overlay = new GraphicsOverlay()
) - 创建一组多边形(
poly = new Polygon(mappoints)
,其中mappoints
是PointCollection
) - 使用多边形几何图形和每个多边形的简单填充符号创建一个图形
(
graphic = new Graphic() { Geometry = poly, Symbol = new SimpleFillSymbol() { Color = Colors.Red } }
) - 将该图形添加到叠加层。 (
overlay.Add(graphic)
)
然后,当有变化时,我会调用 overlay.Graphics.Clear()
,然后重复步骤 2-3。
当我这样做时,有时 new Graphic(...)
,我会得到异常(但不是每次)
我正在使用 Esri.ArcGISRuntime 版本 100.0.0.0。 知道发生了什么事吗?
好的,看来问题是因为 overlay.Graphics.Clear()
只是将对象释放给垃圾收集器,而底层的本机对象尚未被释放。
通过强制垃圾收集器 运行:
GC.Collect();
GC.WaitForPendingFinalizers();
这导致对象被释放并消除了 "same key" 异常
这是一个已知错误,我们将在下一次更新中修复。强制 GC 将暂时解决此问题。