C# 在循环中还是在循环之前调用Device.beginInvokeMainThread?
我在想什么对性能最好?我必须一次添加大约30个管脚。此代码位于从C# 在循环中还是在循环之前调用Device.beginInvokeMainThread?,c#,.net,xamarin,xamarin.forms,xamarin.ios,C#,.net,Xamarin,Xamarin.forms,Xamarin.ios,我在想什么对性能最好?我必须一次添加大约30个管脚。此代码位于从Task.Run()调用的方法中 或 如您所料,第二个示例更好。此外,这是一个移动的土地,所以无论你能得到什么样的性能提升,都可以接受它们 Device.BeginInvokeOnMainThread(() => { if (Pins != null) foreach (Pin pin in Pins) Map.Pins.Add(pin)); }); 您没有在每次迭代中都混搭
Task.Run()调用的方法中代码>
或
如您所料,第二个示例更好。此外,这是一个移动的土地,所以无论你能得到什么样的性能提升,都可以接受它们
Device.BeginInvokeOnMainThread(() =>
{
if (Pins != null)
foreach (Pin pin in Pins)
Map.Pins.Add(pin));
});
您没有在每次迭代中都混搭到UI线程
也可以考虑另一个步骤,如<代码>映射。PIN <代码> >代码>观察> <代码> >代码> PIX<代码>是<代码> iQueNealAs>代码>和/或<代码>列表>代码>同时添加它们,从而节省每次调用/通知。
Map.Pins = Pins;
// or
Map.Pins = new ObservableCollection(Pins);
// raise notification depending on your plumbing
如果您需要添加到现有的<代码> VistabeCelpEng/Cuth>,不幸的是它不支持<代码> ADRangange()/Cuth>,因此考虑创建一个完整的新实例,然后替换它。再一次,这取决于你的方式和原因
var temp = new ObservableCollection(Map.Pins);
foreach (Pin pin in Pins)
temp.Add(pin);
Map.Pins = Temp;
从宿醉中更新
PIN是只读属性
因此批量更新不适用(如上所示)正如您所猜测的,第二个示例更好。此外,这是一个移动的土地,所以无论你能得到什么样的性能提升,都可以接受它们
Device.BeginInvokeOnMainThread(() =>
{
if (Pins != null)
foreach (Pin pin in Pins)
Map.Pins.Add(pin));
});
您没有在每次迭代中都混搭到UI线程
也可以考虑另一个步骤,如<代码>映射。PIN <代码> >代码>观察> <代码> >代码> PIX<代码>是<代码> iQueNealAs>代码>和/或<代码>列表>代码>同时添加它们,从而节省每次调用/通知。
Map.Pins = Pins;
// or
Map.Pins = new ObservableCollection(Pins);
// raise notification depending on your plumbing
如果您需要添加到现有的<代码> VistabeCelpEng/Cuth>,不幸的是它不支持<代码> ADRangange()/Cuth>,因此考虑创建一个完整的新实例,然后替换它。再一次,这取决于你的方式和原因
var temp = new ObservableCollection(Map.Pins);
foreach (Pin pin in Pins)
temp.Add(pin);
Map.Pins = Temp;
从宿醉中更新
PIN是只读属性
因此,批量更新不适用(如上所示)第二种方法更好。第二种方法更好。@sushingover谢谢提醒。我没用过before@SushiHangover谢谢你的提醒。我以前没用过