保持C#Filestream长时间打开是否安全?

时间:2012-11-07 19:10:48

标签: c# file-io filestream

在我的网络服务中,我打开一个文件流到本地磁盘上的文件。我会在服务的整个生命周期中保留这些信息。对于每个进来的查询,我使用文件流来读取磁盘。 我这样做是为了避免在每次查询时重新打开文件流。该路径的延迟是至关重要的(应小于几毫秒)。我使用SSD将磁盘IO时间保持在0.1ms或更短。

文件流可以在很长一段时间(天)内“变坏”(变得无效)。在每个查询上重新打开文件流更安全吗?如果我必须重新打开,每秒不断重新打开文件流的开销是多少?

2 个答案:

答案 0 :(得分:6)

只要您需要,保持文件打开是安全的。

对你的情况有好处 - 你需要自己决定。重新打开文件不应该很慢(即使是在常规驱动器上),但是你需要尝试自己衡量,但你知道自己的确切性能目标。

答案 1 :(得分:5)

我要让文件保持打开状态的唯一问题是,无论出于何种原因,应用程序都会失败,并且无法从当前位置恢复以关闭流; KERNEL32中用于打开文件的CreateFile入口点声明如下:

  

当使用CreateFile返回的对象句柄完成应用程序时,请使用CloseHandle函数关闭句柄。这不仅可以释放系统资源,还可以对共享文件或设备以及将数据提交到磁盘等方面产生更广泛的影响。本主题将酌情注明具体内容。

所以我认为每次打开和关闭FileStream更合适。