在我的Web服务中,我打开了一个指向本地磁盘文件的文件流,并将其保留到服务生命周期结束。对于每个查询,我使用该文件流来读取磁盘上的数据。我这样做是为了避免在每个查询时重新打开文件流。这条路径的延迟很关键(应该小于几毫秒)。我使用SSD来保持磁盘IO时间在0.1毫秒以下。
长时间(数天)后,文件流是否会失效?每次查询重新打开文件流是否更安全?如果我必须重新打开文件流,每秒频繁重新打开文件流会产生多少开销?
在我的Web服务中,我打开了一个指向本地磁盘文件的文件流,并将其保留到服务生命周期结束。对于每个查询,我使用该文件流来读取磁盘上的数据。我这样做是为了避免在每个查询时重新打开文件流。这条路径的延迟很关键(应该小于几毫秒)。我使用SSD来保持磁盘IO时间在0.1毫秒以下。
长时间(数天)后,文件流是否会失效?每次查询重新打开文件流是否更安全?如果我必须重新打开文件流,每秒频繁重新打开文件流会产生多少开销?
只要您需要,保持文件开启是安全的。
是否适合您的情况,您需要自己决定。重新打开文件不应该很慢(即使在常规驱动器上),但是您需要尝试并进行测量,因为除了您以外没有人知道您的确切性能目标。
KERNEL32
中的CreateFile
入口时,会出现以下情况:
因此,我认为每次打开和关闭当应用程序使用CreateFile返回的对象句柄完成操作后,请使用CloseHandle函数关闭句柄。这不仅释放系统资源,还可以对共享文件或设备以及提交数据到磁盘等事项产生更广泛的影响。必要的详细信息将在本主题中适当地说明。
FileStream
都更为合适。