WPF -.Net 4.0解决了DataGrid分组时的内存泄露

简介:

OpenExpressApp中框架自带一个【部门管理】模块,其中【功能权限】设置时用了DataGrid,并且使用了DataGrid的分组功能,UI如下:

用户反应在使用过程中,来回切换【业务对象】进行功能权限设置时,切换多次后会发现允许速度慢的和蜗牛一样。既然这么明显,打开任务管理器,未设置功能权限时内存消耗如下图为50496:

来回切换20次后,发现内存飚升为94580,如果模块负责一些的话,估计会涨得更多:

为了找到具体是哪个类的泄露,我使用了ANTS Memory Profiler 5进行跟踪,发现点击多少次后就回出现多少个BoInfoOperationSelected[]对象

随便找一个对象,查看对象图,发现都是DataGridRow对象:

网上google一下,找到了DataGrid开源项目中的一个问题:Memory leak in DataGrid when grouping?  

里面解释了一下可能的原因:

It looks like in Grouping mode, the row's row.Tracker.StopTracking method is never called, because ClearContainerForItemOverride is never called by the WPF ItemsControl implementation. The result is that you just end up with an ever growing chain of ContainerTracking instances.

最后还附上一句:

Note that Microsoft has acknowledged that this is a bug, being fixed in .NET 4.0. No fix for .NET 3.5 at this time.

把OpenExpressApp更新到Net4后,发现内存还真的不上去了,狂切换业务对象后再用ANTS Memory Profiler 5跟踪一下对象看看,发现就两个,内存泄露问题也没有了!

这只是WPF内存泄露的一个地方,在Finding Memory Leaks in WPF-based applications中专门对WPF内存泄露问题进行了一些描述,估计后续会把Net4的内容加上。

 

 

开源信息系统开发平台之OpenExpressApp框架.pdf













 本文转自 jingen_zhou 51CTO博客,原文链接:http://blog.51cto.com/zhoujg/517974,如需转载请自行联系原作者


相关文章
|
19天前
|
存储 设计模式 编解码
.NET 8.0 通用管理平台,支持模块化、WinForms 和 WPF
【11月更文挑战第5天】本文分析了.NET 8.0 通用管理平台在模块化、WinForms 和 WPF 方面的优势。模块化设计提升了系统的可维护性和可扩展性,提高了代码复用性;WinForms 提供了丰富的控件库和简单易用的开发模式,技术成熟稳定;WPF 支持强大的数据绑定和 MVVM 模式,具备丰富的图形和动画功能,以及灵活的布局系统。
|
2月前
|
设计模式 前端开发 C#
使用 Prism 框架实现导航.NET 6.0 + WPF
使用 Prism 框架实现导航.NET 6.0 + WPF
93 10
|
4月前
|
开发框架 前端开发 JavaScript
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(10) -- 在DataGrid上直接编辑保存数据
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(10) -- 在DataGrid上直接编辑保存数据
|
4月前
|
开发框架 前端开发 搜索推荐
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(4) -- 实现DataGrid数据的导入和导出操作
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(4) -- 实现DataGrid数据的导入和导出操作
|
4月前
|
开发框架 前端开发 JavaScript
在WPF应用中实现DataGrid的分组显示,以及嵌套明细展示效果
在WPF应用中实现DataGrid的分组显示,以及嵌套明细展示效果
在WPF应用中实现DataGrid的分组显示,以及嵌套明细展示效果
|
4月前
|
前端开发 测试技术 C#
WPF/C#:在DataGrid中显示选择框
WPF/C#:在DataGrid中显示选择框
63 0
|
4月前
|
开发框架 .NET C#
WPF/C#:显示分组数据的两种方式
WPF/C#:显示分组数据的两种方式
61 0
|
4月前
|
XML C# 数据格式
WPF/C#:如何将数据分组显示
WPF/C#:如何将数据分组显示
39 0
|
5月前
|
C# 开发者 Windows
WPF在.NET9中的重大更新:Windows 11 主题
这也是一个很好的学习WPF的项目,可以通过看源代码提升自己的WPF水平。 WPF Gallery演示如何在标记中指定 XAML 控件,因为每个控件页都显示用于创建每个示例的标记。它还将显示您的应用程序的所有可能的布局选项。 WPF Gallery应用还包含有关使用颜色、排版和图标开发特殊应用程序的设计指南。它还包括一个示例页,用于演示如何使用不同的控件在 WPF 应用程序中创建用户界面。 WPF在.NET 9中可以使用Win11主题的控件了,有助于WPF开发者们开发出更符合现在设计风格、更美观的界面。 希望WPF越来越好。
65 0
|
7月前
|
XML 数据可视化 C#
C# .NET面试系列五:WPF
<h2>WPF #### 1. WPF 由哪两部分组成? Windows Presentation Foundation (WPF) 由两个主要部分组成: 1、XAML (eXtensible Application Markup Language) ```c# 这是一种基于 XML 的标记语言,用于定义用户界面的结构和外观。XAML允许开发人员使用声明性语法来描述应用程序的用户界面元素,而不是使用传统的编程方式。XAML 被广泛用于定义 WPF 窗体、控件、布局和动画。 ``` 2、Code-behind 文件 ```c# 这是包含与用户界面相关逻辑的代码文件。通常,开发人员可
218 4