虚拟化数据访问

时间:2013-11-29 00:55:07

标签: wpf c#-4.0 asynchronous

我在本地获取一些数据,实际的获取过程非常快。让我们说,结果我在几毫秒之后就有了一个List。

当我将一些项目控件(Ex ListBox)绑定到此数据时,需要一些时间才能在项目控件上显示数据。例如,如果列表中有100个项目,则在ListBox中显示项目大约需要10秒钟。越多越好。

主要问题在于数据显示。每个项目都有一个图像路径。因此,当执行Itemtemplate时,它会将图像缩小到预定义的大小并显示它。因此,图像缩小的CPU时间越多,UI就越有时间响应。

<DataTemplate x:Key="itemTemplate">
  <StackPanel>
    <Image Width="48" Height="48">
      <Image.Source>
        <BitmapImage DecodePixelWidth="48" UriSource="{Binding ImagePath}" />
      </Image.Source>
    </Image>
  </StackPanel>
</DataTemplate>

为了使UI响应,我使用Rx将图像解码移动到异步线程上,这是有效的。但是,由于这是一个简单的项目(单个exe),我试图避免仅为此任务使用Rx。那么,如果没有Rx,我怎么能这样做?

list.ToObservable(Scheduler.Default)
            .Buffer(5)
            .ObserveOn(SynchronizationContext.Current)
            .Subscribe(data =>
                {
                    foreach (var item in data)
                        UIList.Add(item);

                }, null, null);

1 个答案:

答案 0 :(得分:0)

冒着明显的风险,您是否检查过WPF可视化工具以确保您的ListBox实际上是虚拟化项目?