当前位置: 首页 > news >正文

.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的属性后,问题得以解决。

http://www.lryc.cn/news/32351.html

相关文章:

  • NICEGUI---ROS开发之中常用的GUI工具
  • 高盐废水除钙镁的技术解析
  • 回文日期门牌制作
  • 基于半车悬架的轴距预瞄与轴间预瞄仿真对比
  • Linux开发 安装JDK8、p4
  • 基于 x86 SoC 的车辆智能驾驶舱和ADAS设计(一)
  • 类模板函数模板
  • Leetcode DAY 56: 两个字符串的删除操作 and 编辑距离
  • 系统检测维护工具Wsycheck使用(18)
  • 111 ok
  • Python API教程:API入门
  • SpringMVC学习笔记
  • Linux学习记录01
  • VScode 插件【配置】
  • 基于 Rainbond 的 Pipeline(流水线)插件
  • ASGARD:单细胞导向的药物发现
  • js-DOM03-事件
  • 天梯赛题目练习L1-007--L1-009
  • 来吧!接受Kotlin 协程--线程池的7个灵魂拷问
  • Dynamic Movement Primitives (DMP) 学习
  • 2023王道考研数据结构笔记第五章——树
  • setState函数是异步的还是同步的?
  • vue3+ts:约定式提交(git husky + gitHooks)
  • TSP 问题求解的最好方法 LKH
  • RocketMQ5.1控制台的安装与启动
  • 【java基础】类型擦除、桥方法、泛型代码和虚拟机
  • 十家公司有九家问过的软件测试面试题,最后一题我猜你肯定不会
  • C++核心知识(三)—— 静态成员(变量、函数、const成员)、面向对象模型(this指针、常函数、常对象)、友元、数组类、单例模式
  • RocketMQ【3】Rocketmq集群部署(多master多slave)异步复制
  • 魏玛早春 木心