关闭流是否会阻塞线程

  • 本文关键字:线程 是否 c# stream
  • 更新时间 :
  • 英文 :


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

我应该将Close()花费的测量时间包括在内吗?


我们的软件有问题,我怀疑文件操作,例如硬盘繁忙或某种故障可能会导致延迟。在这种情况下调用Close()会导致延迟(阻塞)吗?还是Close()是一种非阻塞方法(但在它之后,framework/winapi文件内部的某个地方正在从写缓冲区等中刷新)?

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

首先,FileStream的文档建议调用Dispose而不是Close。检查参考源,Close所做的就是:

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

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

Close调用Dispose,它做两件事:

  1. 关闭文件句柄
  2. 将所有挂起的写入刷新到磁盘(默认情况下,写入是缓冲的)

当然,"将任何挂起的写操作刷新到磁盘"的意思是,告诉操作系统"将所有挂起的写入操作刷新到硬盘"。操作系统根据各种因素处理不同(例如,USB驱动器的写入速度往往不那么慢,临时文件可能永远不会刷新到磁盘)。

相关内容

  • 没有找到相关文章

最新更新