gpt4 book ai didi

WPF DataGrid2D ItemsSource Memory Leak(WPF DataGrid2D ItemsSource内存泄漏)

转载 作者:bug小助手 更新时间:2023-10-28 09:41:31 24 4
gpt4 key购买 nike



I have a graph item and matrix item. Graph item is canvas where i draw ellipses and lines. In Matrix item I contains matrix. And I used this library
(xmlns:dg2d="clr-namespace:DataGrid2DLibrary;assembly=DataGrid2DLibrary")
(http://www.mediafire.com/?tm1arm230rr1tgi) to bind my 2d matrix to datagrid. But I noticed that before i click on matrix item as soon as the program has just started, i mean firstly i work with graphs. Canvas draws very fast, but after i clicked on matrix item and itemsource has worked when i back to graph again it draws very slowly. Also, I noticed a lot of memory after itemssource.

我有一个图项和一个矩阵项。图形项目是画布,我在那里画椭圆和线条。在矩阵中,项I包含矩阵。我使用这个库(xmlns:dg2d=“clr-namespace:DataGrid2DLibrary;assembly=DataGrid2DLibrary”)(http://www.mediafire.com/?tm1arm230rr1tgi))将我的2D矩阵绑定到数据网格。但我注意到,在程序刚开始时,在我点击矩阵项之前,我的意思是首先我处理图形。画布画得很快,但在我点击矩阵项和项源后,当我再次回到图形时,它画得很慢。此外,我注意到在条目来源之后有很多内存。


In this code I'm trying to null ItemsSource and clear memory

在这段代码中,我尝试将ItemsSource设为空并清除内存


MainWindow.xaml.cs

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();


}

MainWindow.xaml

MainWindow.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>

So the question is: how do i save that canvas drawing speed after click on matrixitem?

因此,问题是:如何在单击MatrixItem后保存画布绘制速度?


更多回答
优秀答案推荐

solved by just removing datagrid when it's not active (delete datagrid from canvas child elements)

只需在数据网格处于非活动状态时将其删除即可解决(从画布子元素中删除数据网格)


更多回答

When answering your own question it helps others to mark the answer as Accepted.

在回答自己的问题时,它可以帮助其他人将答案标记为已接受。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com