簡體   English   中英

我應該處置只讀FileStream嗎?

[英]Should I dispose readonly FileStream

我有一個只讀FileStream,它是方法的局部變量:

public void SomeMethod()
{
   var fileStream = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
   ... //some stream operations
}

我應該在方法末尾調用Dispose(顯式還是“使用”)? 它將發生什么變化?

無關緊要, IDisposableFileStream實現,因此使用完畢后,需要隱式或顯式調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM