[問題] 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