[问题] Stream未Dispose

楼主: YiMMiY (YiMMiY)   2018-03-09 17:08:23
想请版友帮忙修正观念
if(true)
{
StreamReader sr=new StreamReader(XXX);//ex:读取某档
//...A点 做事情
}
//...B点 做事情
上述程式中
虽然sr并未做Dispose(),但sr是if内的区域变量
执行到B点时,sr生命周期已结束,被判断为Garbage,等待GC回收中
唯等待期间资源未释放,可能造成被读取的档案锁死
待GC回收后则恢复正常
请问
以上观念有什么要修正的部分吗?
谢谢
作者: totte (totte)   2018-03-09 18:34:00
1.使用using 或 2. 变量在外面宣告
作者: free112136 (Free)   2018-03-10 09:05:00
万一ex,stream可能会在活久一点,有using就会保证在大括号出去会呼叫dispose
作者: ssccg (23)   2018-03-10 20:07:00
就GC不保证什么时候做,时间可能是差很久
作者: landlord (91)   2018-03-12 22:48:00
https://imgur.com/a/OrT1Zunmanaged资源因为不归CLR管,不知道何时以及如何释放所以如果没有被dispose,最后是呼叫该type的finalize()把外部资源咬住不放掉是一件很危险的事,例如DB connection 咬住,不放掉,通常结果就是两种connection pool 满了,无可用connection这条connection还在使用中,不给你用。大概就像你要搬档案,Windows说有其他process使用中你要退出某个usb装置,它跟你说还在使用中一样...
楼主: YiMMiY (YiMMiY)   2018-03-14 23:34:00
感谢说明~~~

Links booklink

Contact Us: admin [ a t ] ucptt.com