Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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# 糟糕的性能列表框Wp7_C#_Silverlight_Performance_Windows Phone 7_Listbox - Fatal编程技术网

C# 糟糕的性能列表框Wp7

C# 糟糕的性能列表框Wp7,c#,silverlight,performance,windows-phone-7,listbox,C#,Silverlight,Performance,Windows Phone 7,Listbox,我有一个包含约100个元素的列表框 当我尝试滚动时,我的列表框会随机冻结0-3秒,并且经常超出滚动范围。当我删除所有加载图像的代码时,性能并没有提高。 如果我替换“listbox”中的“refreshbox”,性能也不会得到改善。 请帮帮我。 有许多事情需要注意:请参阅 看看XAML,看起来您有一些复杂的用户控件,甚至可能有嵌套的列表框。这对滚动性能是不利的:理想情况下,列表框的所有元素都应该具有相同的已知大小以提供良好的性能。您是否尝试过虚拟化面板 <sharpgis:RefreshB

我有一个包含约100个元素的列表框

当我尝试滚动时,我的列表框会随机冻结0-3秒,并且经常超出滚动范围。当我删除所有加载图像的代码时,性能并没有提高。 如果我替换“listbox”中的“refreshbox”,性能也不会得到改善。 请帮帮我。


有许多事情需要注意:请参阅


看看XAML,看起来您有一些复杂的用户控件,甚至可能有嵌套的列表框。这对滚动性能是不利的:理想情况下,列表框的所有元素都应该具有相同的已知大小以提供良好的性能。

您是否尝试过虚拟化面板

<sharpgis:RefreshBox.ItemsPanel>
    <ItemsPanelTemplate>
        <VirtualizingStackPanel/>
    </ItemsPanelTemplate>
</sharpgis:RefreshBox.ItemsPanel>

如果列表框与数据绑定,则数据分配将冻结UI。 你可以试试这个:

public ObservableCollection<object> MyCollectionProperty { get; set; }
public void SetValues(IEnumerable<object> values)
{
      MyCollectionProperty = new ObservableCollection<object>();
      foreach (var item in values)
      {
          var addingItem=item;
          Dispatcher.BeginInvoke(() => MyCollectionProperty.Add(addingItem));
      }
}
公共ObservableCollection MyCollectionProperty{get;set;} 公共void集合值(IEnumerable值) { MyCollectionProperty=新的ObservableCollection(); foreach(值中的var项) { var addingItem=项目; Dispatcher.BeginInvoke(()=>MyCollectionProperty.Add(addingItem)); } }
通常,当绑定元素的getter方法尝试执行某些函数时,具有绑定的listbox会变慢,从而使listbox返回w8,直到操作完成。因此,请检查数据源以提高性能…数据源
public ObservableCollection<object> MyCollectionProperty { get; set; }
public void SetValues(IEnumerable<object> values)
{
      MyCollectionProperty = new ObservableCollection<object>();
      foreach (var item in values)
      {
          var addingItem=item;
          Dispatcher.BeginInvoke(() => MyCollectionProperty.Add(addingItem));
      }
}