[英]Should I dispose readonly FileStream
我有一個只讀FileStream,它是方法的局部變量:
public void SomeMethod()
{
var fileStream = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
... //some stream operations
}
我應該在方法末尾調用Dispose(顯式還是“使用”)? 它將發生什么變化?
無關緊要, IDisposable
由FileStream
實現,因此使用完畢后,需要隱式或顯式調用Dispose
。 這是在代碼中使用類的契約的一部分。
我認為最好將其包裝在using
語句中。 如果您確實希望代碼健壯,則還需要異常處理。 它將像現在一樣工作,這只是一種不好的做法。
必須處置任何實現IDisposable
實例,並且好的做法是using
語句來處置它。
不要認為分析每個案例特別有幫助。
如果您無法處理,則在GC啟動之前(不確定), FileStream
將不會關閉。
在這種情況發生之前,您將按住打開的文件句柄,以防止某些類型的文件訪問(例如寫入,刪除)。
請注意,指定FileShare.ReadWrite
不一定有幫助-如果其他編寫者嘗試使用FileShare.None
打開文件(例如,通過調用File.OpenWrite
),則在您關閉文件之前,他將無法這樣做。
因此,是的,請using
語句關閉文件。
如果可以處理某個對象,則應在不再需要它時就對其進行處理。 來自FileStream Class主題:
如果進程終止於文件的一部分被鎖定或關閉具有未決鎖的文件,則該行為是不確定的。
正如每個人的建議:處置每個IDisposable
,最好using
。
現在,對於文件來說,當您真的想阻止其他人訪問/修改文件時,可能會有特殊情況。 在這種情況下,您仍然會在某個時候處置文件,但是這個“某個時刻”可能會在代碼/應用程序生存期的后期顯着增加。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.