.net6 wpf程序一个内存不断增长问题的解决方法

一个.net6的应用程序,底层不断采集数据。使用wpf制作了一个简单的界面显示数据接收的情况。

程序中引用了 Material Design UI框架。

当程序长时间运行时发现内存在不断增长。一个星期后工作集占用内存达到1GB。

使用dotnet-dump工具收集内存使用情况,并且分析发现 在gen2内存中,

System.IO.UnmanagedMemoryStream对象在不断增长。(使用 dotnet-dump collection -p 进程ID 收集内存使用情况, 使用dotnet-dump analyze 进行分析, 使用 dg gen2查看Gen2内存使用情况)

在解决方案中,另外有一个命令行程序,除了显示数据外,其他功能与wpf程序的功能完全一致。单独运行命令行程序,发现内存不增长,System.IO.UnmanagedMemoryStream对象也不增加。

因此判断问题出现在UI界面显示。

通过注释不同显示模块,最终发现,界面一个TextBlock绑定了不断变化的接收数据的数量,只要不显示此TextBlock,内存就不再增长。binding代码,并没有任何特殊情况。

从网络上查找发现 有类似的情况。

原来原因是在主窗体中指定了FontFamily为MetarialDesign的字体,而出问题的TextBlock是在一个UserController. 如果FontFamily不指定或者指定为Windows系统自带的字体,则不会出现内存泄漏的问题。或者UserController中再次指定字体FontFamily(这个没有试)。

去掉主窗口中FontFamily的属性后,问题得以解决。

你可能感兴趣的:(windows,wpf,c#,.net,内存泄漏,字体)