对象占用内存的释放

本文深入探讨了在使用Socket编程时遇到的内存泄漏问题,详细分析了如何在.NET环境下使用Dictionary存储数据包导致的内存占用异常增加现象。作者通过Visual Studio的性能探查器定位问题,并分享了解决方案,即在解除对象引用前清空回调,从而触发垃圾回收机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  最近写socket时填了个坑,服务端在接收数据后占用内存几乎同比增大。接收数据的对象用Dictionary将收到的数据包都存了起来。很简单嘛,存好后将对象解引用内存就回收了。于是解引用,内存未释放。于是将字典清空,解引用,内存未释放,摊手(才不止这点attempts, mmp)。点开vs->分析->性能探查器,分析内存占用,确实是字典占用了内存。后来终于发现自己忽略了对象有一个回调,该回调用于在存数后发起通知,把回调置空后GC终于干活了。之前还专门记录过,再在这儿贴出来:引用了实例方法的委托也就引用了一个特定的对象,当通过该委托调用这个实例方法时,该对象在调用中成为 this。https://www.cnblogs.com/xuanhu/p/10591382.html

  可以做一个有趣的尝试:Form1有个委托,两个按钮;Form2有个函数,该函数只做一件事儿,ShowMessageBox;Fomr1按钮1单击事件实例化一个Form2,并将Form2的函数添加到Form1委托的调用列表中,然后Form2.Dispose,再调用委托。Form1按钮2单击事件搞个for循环,按钮1.PerformClick。运行点击Form1的按钮2看看结果,印象应该比较深刻。

转载于:https://www.cnblogs.com/xuanhu/p/11241699.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值