我想弄清楚什么是最佳性能?我必须一次添加大约30个引脚。此代码位于从Task.Run();
if (Pins != null)
foreach (Pin pin in Pins)
Device.BeginInvokeOnMainThread(() => Map.Pins.Add(pin));
或者
Device.BeginInvokeOnMainThread(() =>
{
if (Pins != null)
foreach (Pin pin in Pins)
Map.Pins.Add(pin));
});
答案 0 :(得分:2)
正如您所猜测的那样,第二个例子更好。此外,这是移动的土地,所以你可以获得的性能提升,拿走它们。
Device.BeginInvokeOnMainThread(() =>
{
if (Pins != null)
foreach (Pin pin in Pins)
Map.Pins.Add(pin));
});
每次迭代都不会与UI线程混搭。
另外我会考虑另一个步骤,如果Map.Pins
ObservableCollection
和Pins
是IEnumerbale
和/或List
一次性添加它们,每次都保存通话/提高通知。
Map.Pins = Pins;
// or
Map.Pins = new ObservableCollection(Pins);
// raise notification depending on your plumbing
如果您需要添加到现有的ObservableCollection
,不幸的是它支持AddRange()
,那么请考虑创建一个全新的实例,然后替换它。这又取决于你的方法和原因。
var temp = new ObservableCollection(Map.Pins);
foreach (Pin pin in Pins)
temp.Add(pin);
Map.Pins = Temp;
来自SushiHangover的更新
Pins是只读属性
因此批量更新不适用(如上所示)