听说c# 的垃圾清理机制很强大,但它真的万能吗?
我的程序前面建立链接时 new 了下面这些东西:
IPEndPoint;
Socket;
StartListeHandler;
ReceiveMsgHandler;
SocketAsyncEventArgs;
EventHandler;
SocketAsyncEventArgs;
byte[50];
EventHandler<SocketAsyncEventArgs>
new object[] { str, this.FCS(str), "*", '\r' }
后面关闭链接时仅仅对 Socket 对象执行了 Shutdown 和 Close 方法。
请问其他对象会不会自动释放呢?还是需要显式释放?
现在程序运行一会就会死掉,所以怀疑是内存里垃圾。定时使用 GC.collect() 也没有效果。
谢谢!
------解决思路----------------------
死掉的时候,看内存,有泄露吗,没有就不是释放的问题
目测你用到的变量类型都是托管资源,不需要手动释放
检查程序是否有阻塞或死循环的代码吧
是否通信部分写在了主线程里,并且是同步的?
改成异步socket,或者开个线程
------解决思路----------------------
程序“死掉”之后,要跟踪各种输入数据,看看哪一个输入开始而没有响应的,然后在csdn提出你的调试过程和跟踪路线来,而不是乱七八糟地开始瞎猜。
------解决思路----------------------
一个程序如果没有预期的响应,它也是在时时刻刻在工作的,你必然可以实实在在地去调试到底层的各种机制经历的各种操作事件。如果你上来就研究“听说c# 的垃圾清理机制很强大,但它真的万能吗?”这种问题,这就不是正常的debug的思路。