VS 自带 诊断工具的一个疑问

zmidl 2020-05-23 08:35:48

如图
当前任务是tcpClient接收大量数据显示到界面,发现内存暴增,于是诊断工具查看内存变化
在通过检查两组快照后 定位到某些占资源的对象后发现有些控件右边有“检测到循环”的标签。是什么意思啊?是不是就是这个循环造成的?
我用的是wpf + mvvm 方式绑定数据到UI 的 。如果是这个 “循环”导致的内存暴增的话 有啥解决方案呢?
希望有过相同经历的大鸟来帮个忙。。手里就这点分了全部拿出来了。
...全文
500 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zmidl 2020-09-03
  • 打赏
  • 举报
回复
感谢楼上两位进来顶贴。问题找到了。用动态函数接受数据 ,每次都是new 一个对象 没有销毁,内测暴增
正怒月神 2020-05-25
  • 打赏
  • 举报
回复
wpf我不怎么玩,我只是来分析一下问题。 先分析问题, 一般来说, 内存暴涨,就是开辟内存的速度,大于了回收速度。 这种问题,普遍是之前的内存被引用,占着释放不了。 在看你的检测到循环。 普遍来说,存在2个情况。 1 递归导致 这个很明显,递归会占着引用不放。(但是你这边应该不是这个问题。) 2 两个以上的类中,有相互的实例化对象。(我估计这个可能性比较大。) 比如 A 类中 B b=new B(); B 类中 A a=new A(); 要解决2这个问题,也比较简单。 有2个方案, 1 所有的实例化,都在各自的方法内,用到哪些类,就实例化哪些类。不要做全局的。 2 使A 或者B其中一个 继承自一个接口IA/IB 使用时,IA a=new A();
threenewbee 2020-05-24
  • 打赏
  • 举报
回复
存在循环引用,也就是它引用的对象又引用回来了。

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧