WPF DataGrid2D ItemsSource 内存泄漏

问题描述 投票:0回答:1

我有一个图形项和矩阵项。图形项目是画布,我在其中绘制椭圆和线条。在矩阵项 I 中包含矩阵。我使用了这个库 (xmlns:dg2d =“clr命名空间:DataGrid2DLibrary;程序集= DataGrid2DLibrary”) (http://www.mediafire.com/?tm1arm230rr1tgi)将我的二维矩阵绑定到数据网格。但我注意到,在程序刚启动后我单击矩阵项之前,我的意思是首先使用图表。 Canvas 绘制速度非常快,但是当我单击矩阵项并且 itemsource 工作后,当我再次返回图形时,它绘制得非常慢。另外,我注意到 itemssource 之后有很多内存。

在此代码中,我尝试将 ItemsSource 设为 null 并清除内存

MainWindow.xaml.cs

private void MatrixData(object sender, RoutedEventArgs e)
        {
            if (MatrixMenu.IsChecked)
            {
                if (DrawingCanvas_Undirected.Visibility == Visibility.Visible || DrawingCanvas_Directed.Visibility == Visibility.Visible)
                {
                    GraphItem.Visibility = Visibility.Visible;
                }

                MatrixItem.Visibility = Visibility.Collapsed;

                MatrixAdj.ItemsSource2D = null;
                MatrixInc.ItemsSource2D = null;
                MatrixMenu.IsChecked = false;
                GC.Collect();


            }

主窗口.xaml

<Grid x:Name="MatrixItem" Visibility ="Collapsed">
            <Grid.RowDefinitions>
                <RowDefinition Height="149*"/>
                <RowDefinition Height="285*"/>
            </Grid.RowDefinitions>
            <Canvas>
                <dg2d:DataGrid2D x:FieldModifier="public" x:Name="MatrixAdj" 
                     VirtualizingPanel.IsVirtualizingWhenGrouping="True"
                     Canvas.Left="411" Canvas.Top="20"
                     Width="350" Height="289"
                     AlternationCount="2"
                     UseModifiedDataGridStyle="True"
                     ItemsSource2D="{Binding Int2DList}"
                     RowBackground="White"
                     AlternatingRowBackground="#ebebeb"                       
                     Background="Transparent" HorizontalAlignment="Left" VerticalAlignment="Center" />


            </Canvas>
            <Canvas Margin="4,2,-4,265" Grid.RowSpan="2">
                <dg2d:DataGrid2D x:FieldModifier="public" x:Name="MatrixInc" 
                             Canvas.Left="19" Canvas.Top="20"
                             Width="350" Height="289"
                             AlternationCount="2"
                             UseModifiedDataGridStyle="True"
                             ItemsSource2D="{Binding Int2DList}"
                             RowBackground="White"
                             VirtualizingPanel.IsVirtualizingWhenGrouping="True"
                             AlternatingRowBackground="#ebebeb"                       
                             Background="Transparent" Grid.RowSpan="2" HorizontalAlignment="Left" VerticalAlignment="Center"/>
            </Canvas>
</Grid>

所以问题是:点击矩阵项后如何保存画布绘制速度?

wpf data-binding datagridview memory-leaks
1个回答
0
投票

通过在数据网格不活动时删除它来解决(从画布子元素中删除数据网格)

© www.soinside.com 2019 - 2024. All rights reserved.