WPF:将UiElements添加到grid / Itemscontrol性能

时间:2015-08-17 10:09:47

标签: c# .net wpf graphic

我们有一个可以进行测量的设备(每秒最多1000次)。现在我想创建一个将测量值绘制到网格或其他东西的视图。我的问题是如何在这么短的时间内处理这么多的数据,我创建了一个小的测试应用程序,每隔10毫秒绘制一个点到网格。应用冻结高达2000点。当我立即将5000点或更多点绘制到网格时,它没有问题并且工作正常。 WPF是否会变慢,我是否要使用特殊的图形库?

private void _Content_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        var random = new Random();
        var grid = new Grid()
                   {
                       Width = 5000,
                       Height = 5000
                   };
        var viewBox = new Viewbox
                      {
                          Stretch = Stretch.Fill,
                          Child = grid
                      };
        _Content.Content = viewBox;
        for(int i = 0; i < 5000; i++)
        {
            var child = new Ellipse()
                        {
                            Width = 200,
                            Height = 200,
                            Fill = Brushes.Blue
                        };
            ((FrameworkElement) child).Margin = new Thickness(random.Next(4800), random.Next(4800), random.Next(4800), random.Next(4800));
            grid.Children.Add(child);
        }
    }

这是一个小testapp的代码,我也用数据绑定和一个可观察的集合来尝试它,但它并没有太大的区别。

1 个答案:

答案 0 :(得分:0)

我怀疑发生的事情是你每10ms做一次BeginInvoke(),但是调度程序无法足够快地执行调度代码。因此,越来越多的调度呼叫正在建立,直到应用程序不再起作用。

如果您能够在WPF中调度并执行10ms内的代码,我会非常惊讶。