【发布时间】:2012-11-07 19:10:48
【问题描述】:
在我的网络服务中,我打开一个文件流到本地磁盘上的一个文件。我会在服务的整个生命周期内保留它。对于传入的每个查询,我使用文件流来读取磁盘。 我这样做是为了避免在每次查询时都必须重新打开文件流。这条路径的延迟很关键(应该少于几毫秒)。我使用 SSD 将磁盘 IO 时间保持在 0.1 毫秒或更短。
文件流能否在很长一段时间(几天)内“变坏”(变得无效)。在每个查询中重新打开文件流是否更安全?如果我必须重新打开,那么每秒多次重新打开文件流的开销是多少?
【问题讨论】:
-
如果您担心延迟,是否有理由不将文件内容加载到静态内存中?我认为问题应该是您应该使用什么模式来快速访问内容。
-
文件太大而无法放入内存。我有一个索引,可以让我直接寻找正确的偏移量并从那里读取。它不应该超过 1 个 IO。读取的数据量小。
-
您是否编写了一个测试工具来尝试打开单个文件流与打开和关闭。我建议您尝试为此编写一个测试并比较结果。
-
基本测试显示性能没有显着差异。但是我还没有创建一个发送真实查询的压力测试,所以不确定它在负载下会如何表现。你是对的,我应该。
-
我很想听听你的结果。如果差异可以忽略不计,那么我建议始终关闭以限制失败的机会。
标签: c# file-io filestream