仅创建FileStream对象开销大吗?是否会触发I/O操作?
FileStream构造函数的I/O开销与行为分析
针对代码 var fileStream = new FileStream(fullPath, FileMode.Open, FileAccess.Read, FileShare.Read);,逐一解答你的问题:
是否属于I/O层面的高开销操作?
不属于。这个操作的I/O开销非常小,仅完成文件句柄的创建,以及读取少量文件元数据(比如文件大小、权限、磁盘存储位置等),不会涉及文件内容的读取,I/O成本极低。是否已触发I/O操作?
是的,已经触发了少量I/O。构造函数会向操作系统发起打开文件的请求,操作系统需要从磁盘(若文件不在系统缓存中)读取文件元数据,以此验证文件存在性、初始化文件句柄,这些都是实际的I/O操作。是否存在间接的I/O行为?
存在。哪怕你没调用任何读取文件内容的方法,构造函数在完成文件打开的过程中,已经和磁盘产生了交互——操作系统必须读取文件的基本信息才能完成句柄创建,这就是间接的I/O行为。该对象是否只是内存中的POCO?
当然不是。FileStream不是纯内存的简单对象,它封装了操作系统的文件句柄,构造过程中会和操作系统内核交互,申请文件资源、获取元数据,这些都是超出纯内存对象范畴的操作。
内容的提问来源于stack exchange,提问作者Wouter Vandenputte
相关产品推荐
相关产品推荐

