关闭流会阻塞线程吗?

时间:2016-05-12 15:34:13

标签: c# stream

我定期将数据保存到文件中(文件每次都打开和关闭)我希望使用Stopwatch来测量文件操作所花费的时间。

我是否应该将Close()

纳入测量时间

我们遇到软件问题,我怀疑文件操作,例如繁忙的硬盘驱动器或某种可能导致延迟的故障。在这种情况下调用Close()会导致延迟(阻塞)还是Close()非阻塞方法(但是在框架/ winapi文件深处的某个地方正在从写入缓冲区等中刷新)?

或者Write()可能会在发生故障时变慢?我不知道如何模拟磁盘问题以快速测试会发生什么。

1 个答案:

答案 0 :(得分:-1)

首先,the documentation for FileStream建议调用Dispose而不是Close。检查参考源,所有Close都是:

Dispose(true);
GC.SuppressFinalize(this);
  

在这种情况下调用Close()会导致延迟(阻塞)或者是   Close()一个非阻塞方法(但在某个内部深处   框架/ winapi文件正在从写入缓冲区等中刷新   它)?

Close调用Dispose,它执行两项操作:

  1. 关闭文件句柄。
  2. 刷新任何挂起的磁盘写入(默认写入是缓冲的)。
  3. 当然,"刷新任何待处理的磁盘写入"意味着,告诉操作系统"刷新任何挂起的磁盘写入。"操作系统根据各种因素处理不同(例如,USB驱动器往往写得不那么懒,临时文件可能永远不会刷新到磁盘上。)