CreateFile()的成本是多少?

时间:2009-06-14 19:12:22

标签: performance winapi

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

我想知道每次编写时都会调用CreateFile(),

这种方式的成本是否比我刚才调用它的方式要多,那么

多次使用手柄?

5 个答案:

答案 0 :(得分:7)

如果要多次写入文件,最好保留CreateFile()返回的句柄。创建文件的内核句柄对于重用旧句柄(所有其他条件相同)总是效率较低,但可能还有其他注意事项需要考虑。与往常一样,您应该衡量 之前的 之后

答案 1 :(得分:2)

CreateFile肯定会花费一些时间来进行每次调用(如果你再次打开同一个文件,我会猜几微秒,这要归功于驱动程序和操作系统缓冲,但你应该用一点基准来测量这对你至关重要)。但是,如果程序或系统在操作过程中发生崩溃,那么无限期地保持文件打开可能会产生令人不快的结果 - 这种情况是否取决于您正在处理的文件格式以及您正在对其执行的写入操作

答案 2 :(得分:2)

保持手柄打开不一定是最好的方法。根据您的设计,保持打开手柄可能会有问题。虽然CreateFile肯定会有开销,但如果与I / O操作本身的成本相比,它是不可忽略的,我会感到非常惊讶。话虽如此,确定的方法是尝试两种方式并衡量差异。如果它可以忽略不计,我怀疑,那么使用最适合你的方法。

答案 3 :(得分:1)

重用文件句柄可以提供更好的性能,是一种更好的设计。最有可能的是,操作系统的磁盘缓存将隐藏许多性能命中。我不确定你为什么要重复调用CreateFile(),除非你从不同的应用程序区域访问它,这使得传递句柄变得困难。

答案 4 :(得分:1)

创建文件句柄会产生开销,只要您想要读取/写入文件,最好创建一个句柄并保留该句柄。这取决于你做了多少,你是每秒做100次还是每分钟做一次?