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,如需转载请自行联系原作者


相关文章
|
2月前
|
存储 开发框架 .NET
"揭秘.NET内存奥秘:从CIL深处窥探值类型与引用类型的生死较量,一场关于速度与空间的激情大戏!"
【8月更文挑战第16天】在.NET框架中,通过CIL(公共中间语言)可以深入了解值类型与引用类型的内存分配机制。值类型如`int`和`double`直接在方法调用堆栈上分配,访问迅速,生命周期随栈帧销毁而结束。引用类型如`string`在托管堆上分配,堆栈上仅存储引用,CLR负责垃圾回收,确保高效且自动化的内存管理。
52 6
|
1天前
|
设计模式 前端开发 C#
使用 Prism 框架实现导航.NET 6.0 + WPF
使用 Prism 框架实现导航.NET 6.0 + WPF
23 10
|
1月前
|
存储 运维
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
|
2月前
|
缓存 程序员
封装一个给 .NET Framework 用的内存缓存帮助类
封装一个给 .NET Framework 用的内存缓存帮助类
|
2月前
|
缓存 开发框架 .NET
看看 Asp.net core Webapi 项目如何优雅地使用内存缓存
看看 Asp.net core Webapi 项目如何优雅地使用内存缓存
|
2月前
|
数据库 C# 开发者
WPF开发者必读:揭秘ADO.NET与Entity Framework数据库交互秘籍,轻松实现企业级应用!
【8月更文挑战第31天】在现代软件开发中,WPF 与数据库的交互对于构建企业级应用至关重要。本文介绍了如何利用 ADO.NET 和 Entity Framework 在 WPF 应用中访问和操作数据库。ADO.NET 是 .NET Framework 中用于访问各类数据库(如 SQL Server、MySQL 等)的类库;Entity Framework 则是一种 ORM 框架,支持面向对象的数据操作。文章通过示例展示了如何在 WPF 应用中集成这两种技术,提高开发效率。
41 0
|
2月前
|
C# Windows 开发者
超越选择焦虑:深入解析WinForms、WPF与UWP——谁才是打造顶级.NET桌面应用的终极利器?从开发效率到视觉享受,全面解读三大框架优劣,助你精准匹配项目需求,构建完美桌面应用生态系统
【8月更文挑战第31天】.NET框架为开发者提供了多种桌面应用开发选项,包括WinForms、WPF和UWP。WinForms简单易用,适合快速开发基本应用;WPF提供强大的UI设计工具和丰富的视觉体验,支持XAML,易于实现复杂布局;UWP专为Windows 10设计,支持多设备,充分利用现代硬件特性。本文通过示例代码详细介绍这三种框架的特点,帮助读者根据项目需求做出明智选择。以下是各框架的简单示例代码,便于理解其基本用法。
80 0
|
2月前
|
开发框架 监控 .NET
|
2月前
|
开发框架 前端开发 JavaScript
在WPF应用中实现DataGrid的分组显示,以及嵌套明细展示效果
在WPF应用中实现DataGrid的分组显示,以及嵌套明细展示效果
在WPF应用中实现DataGrid的分组显示,以及嵌套明细展示效果