CreateFile()的成本是多少?

3

我想经常在文件中写入数据,

我想知道每次写入时是否需要调用CreateFile(),

这种方式的成本是否比仅调用一次然后多次使用句柄的方式更高?

5个回答

7
如果您要多次写入文件,最好保留CreateFile()返回的句柄。创建文件的内核句柄始终比重复使用旧句柄效率更低(其他条件相同),但还有其他考虑因素需要考虑。像往常一样,您应该在进行任何这种优化之前和之后测量性能。

2
好的回答。最后一句话很重要。 - dmeister

2

CreateFile函数每次调用都需要一定的时间(如果您多次打开同一个文件,则可能只需要微秒级别的时间,这要归功于驱动程序和操作系统的缓冲,但如果这对您很重要,请使用小型基准测试来进行测量)。但是,如果在操作中程序或系统崩溃,长时间保持文件打开可能会导致不愉快的结果——是否会出现这种情况取决于您正在处理的文件格式以及您正在对其执行的写入操作。


2

保持句柄打开并不一定是最好的方法。根据你的设计,保持一个打开的句柄可能会有问题。虽然CreateFile肯定会产生开销,但如果与I/O操作本身的成本相比较,那么它几乎可以忽略不计。话虽如此,确切的方法是尝试两种方式并测量差异。如果是可以忽略不计的,就像我想的那样,那么使用最适合你的方法。


CreateFile的开销在于I/O操作...它必须读取安全元数据以执行访问检查,然后才能授予句柄。现在,磁盘缓存可以加速元数据访问...但这也可以加速您的I/O操作。 - Ben Voigt

1

重复使用文件句柄将提高性能并具有更好的设计。操作系统的磁盘缓存很可能会隐藏许多性能问题。我不确定为什么您要反复调用CreateFile(),除非您正在从不同的应用程序区域访问它,并且这使得传递句柄变得困难。


1

创建文件句柄会有一定的开销,因此最好创建一个句柄并将其保持在需要读写文件的整个过程中。这取决于你需要执行多少次操作,是每秒100次还是每分钟一次?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接