调用CreateFile的最有效方式

问题描述 投票:-1回答:1

我处于性能至关重要的情况,在这种情况下,我可能会打开数千个文件(特别是备用数据流)。这些流通常只有几百个字节长,我直接将它们读入缓冲区。我想知道是否存在一种最佳方法来调用CreateFile以最大化性能。我当前的通话非常简单,看起来像这样:

CreateFile

我想知道是否有任何技巧或细微差别来从函数调用或后续的读取操作中挤压出额外的速度。 m_hStream = CreateFile( szADSPath, m_dwStreamAccessMode, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, NULL, NULL ); 讨论了一些似乎会影响性能的标志,例如documentation,但我不确定这些标志是否适用。感谢您的任何输入或指导。

c++ windows winapi createfile
1个回答
0
投票

我正在打开潜在的数千个文件(特别是备用数据流)。流通常只有几百个字节长

您认为在这种情况下绕过缓存会提高性能吗?我怀疑。

您应该相反,依靠高速缓存,以便可以在单个I / O操作中合并多个可写入的文件。

而且就其本身而言,FILE_FLAG_SEQUENTIAL_SCAN中没有太多要优化的地方。反正是OS电话。也许您可以通过调用CreateFile更直接地调用OS。这将跳过一些内容,例如文件时间戳更新。

可以帮助OS尽快执行操作的一件事是一次发布多个操作,然后让系统以任意顺序执行它们。除了生成线程(其本身很昂贵)之外,可以通过将NtCreateFile传递到FILE_FLAG_OVERLAPPED并使用OVERLAPPED I / O(或使用CreateFile等效项)来实现。

© www.soinside.com 2019 - 2024. All rights reserved.