Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在循环中还是在循环之前调用Device.beginInvokeMainThread?_C#_.net_Xamarin_Xamarin.forms_Xamarin.ios - Fatal编程技术网

C# 在循环中还是在循环之前调用Device.beginInvokeMainThread?

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)); }); 您没有在每次迭代中都混搭

我在想什么对性能最好?我必须一次添加大约30个管脚。此代码位于从
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谢谢你的提醒。我以前没用过