为什么windows第一次打开文件那么慢,有没有更快的方法

2024-03-29

这是 Windows 7,64 位,专业版使用

考虑一个非常简单的循环

for (i = 0; i < names->size(); i++)
{
    std::string Name = names->at(i);
    HANDLE fileHandle = CreateFile(Name.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

    if (fileHandle == INVALID_HANDLE_VALUE)
    {
        throw "Failed";
    }

    CloseHandle(fileHandle);
}

如果我在包含 863 个文件的目录上运行此命令,则需要略多于 22 秒的时间,即每个文件 25 毫秒。下次 169 毫秒或 0.19 毫秒/文件。如果我只在新目录上使用 find_file 时间非常快,大约 0.2 毫秒/文件。虽然我在这里使用了 CreateFile,但其他方法也会产生相同的结果。

答案当然是文件缓存:Windows必须缓存有关文件打开的信息。而且,必须是磁盘访问,就像目录在SSD上一样,第一次和第二次打开大致相同。

现在这些硬盘上的寻道时间只有 9 毫秒,所以有人知道当打开/关闭一个仅读取而不读取的文件需要 25 毫秒时 WINDOWS 正在做什么吗?但更重要的是,是否有可能加快这一速度。你可能会说25ms很快,但我是播放视频文件,所以需要33ms左右读取,而实际读取数据在30ms左右,所以打开的成本太高了。

关于如何开设的任何建议**快速加载文件将不胜感激。


Windows 做了一个lot当您打开文件时。我不是专家,但我可以提到文件系统维护(更新访问时间、日志记录等)和访问权限检查作为两个重要项目。不幸的是,我认为你不能让它更快。

当然,如果您不打算从文件中读取任何内容,而只是检查文件是否存在或读取一些元数据(例如修改时间),则有更快的方法可以在不打开文件的情况下执行此操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么windows第一次打开文件那么慢,有没有更快的方法 的相关文章

  • QSpinBox 具有用于十六进制输入的 Unsigned Int

    这里写了很多关于 QSpinBox 使用 int 作为其数据类型的限制的问题 人们通常希望显示更大的数字 就我而言 我希望能够以十六进制显示无符号 32 位整数 这意味着我希望我的范围为 0x0 0xFFFFFFFF 正常的 QSpinBo
  • 在 Silverlight 中编辑并继续?

    Edit And Continue 是我最喜欢的调试工具之一 我之前曾在基于 C 的 Winforms 和 ASP NET 项目中使用过它 但是 我在 VS 2008 上运行 Silverlight 3 0 应用程序 每当我尝试进行更改 中
  • 如何在 C# winforms 中翻译文本

    我需要翻译一些文本 我正在尝试使用谷歌翻译器来翻译它 我检查了这个article http martinnormark com translate text in c using google translate 但我在以下代码中遇到异常
  • 设置 C# 可选参数的默认值

    每当我尝试将可选参数的默认值设置为资源文件中的某些内容时 我都会收到以下编译时错误 message 的默认参数值必须是编译时常量 有什么方法可以改变资源文件的工作方式来实现这一点吗 public void ValidationError s
  • 在 C 中从数组创建子数组的最佳方法

    我有一个数组说a 3 1 2 5 我必须创建另一个数组a2 2 2 5 我尝试过的是创建一个新数组a2 只需复制所需位置范围内的所有元素即可 在C语言中还有其他方法可以实现这一点吗 memcpy a2 a 1 2 sizeof a
  • std::ostream 需要功能帮助

    我需要有人逐步向我解释这些代码行 并且我需要一些帮助来使用 ostream 和简单的示例 谢谢 inline std ostream operator lt lt std ostream os const Telegram t os lt
  • 线程忙等待

    基本上 我需要忙着等待一些 html 出现在网页上 我创建了以下代码来忙等我 public void ExecuteBusyWaitThreads foreach Canidate canidate in allCanidates Thre
  • 在 C# 中创建 Cron 作业

    我正在用 C 编写一个调度类型应用程序 并允许用户存储他们想要在特定时间运行的任务 现在 我为他们提供了指定运行频率 每日 每周 每月 以及指定时间的选项 然后将其存储在数据库中 我在理解其背后的伪代码时遇到了一些麻烦 并且正在寻找一些有关
  • std::async 可以调用 std::function 对象吗?

    是否可以使用 std async 调用使用 std bind 创建的函数对象 以下代码无法编译 include
  • 如何在 servicestack.net 中实现身份验证

    我正在调查 servicestack net 但它的示例和文章似乎没有涵盖身份验证 这是由 servicestack net 处理的东西 如果是的话如何处理 我特别有兴趣实现对以下方面的支持 OAuth 因此能够检查原始请求并验证它 检索关
  • 使用 istream_iterator 范围构造时无法访问向量

    我尝试编译此代码片段 但出现编译器错误 使用 Visual Studio 2010 进行编译 include
  • C++ 抛硬币程序错误

    我正在尝试计算抛硬币中连续的正面朝上的次数 不幸的是 我的连续头计数器没有正确增加 有任何想法吗 代码和示例输出如下 include
  • 从 std::list 中删除具有特定值的元素

    我需要从 std list 中删除具有特定值的元素 随着list
  • 哪个对缓存最友好?

    我试图很好地掌握面向数据的设计以及如何在考虑缓存的情况下进行最佳编程 基本上有两种情况我无法完全确定哪个更好以及为什么 是拥有一个对象向量更好 还是拥有对象原子数据的多个向量更好 A 对象向量示例 struct A GLsizei mInd
  • C 结构体中的 Typedef

    首先是令我困惑的代码 typedef struct Object typedef int MyInt void destructor Object void constructor struct Object Object 为什么编译器阻止
  • 如何在 asp.net 中用空字符串替换字符串中的任何“/ \\ [ ] : | < > + = ; , ? *”字符

    我想用 asp net c 中的空字符串替换字符串中出现的任何以下字符 我正在尝试将其替换为 mystring contains mystring Replace 目前我正在按照上面的方法进行 有没有更干净的方法来做到这一点 感谢致敬 有很
  • VB.NET 相当于 C# var 关键字 [重复]

    这个问题在这里已经有答案了 是否有与 C 等效的 VB NETvar关键词 我想用它来检索 LINQ 查询的结果 选项推断 http msdn microsoft com en us library bb384665 aspx必须是on为了
  • Python:Pycharm 运行时

    我目睹了 PyCharm 的一些奇怪的运行时问题 解释如下 该代码已在具有 20 个内核和 256 GB RAM 的机器上运行 并且有足够的空闲内存 我没有展示任何实际功能 因为它是一个相当大的项目 但我非常乐意根据要求添加详细信息 简而言
  • EF,Code First - 如何在插入时设置自定义 Guid 标识值

    在处理在数据库中插入新实体时 我面临以下问题Guid作为主键 代码优先的 EF 5方法 我知道有很多类似的主题 因为我为此问题运行了几个小时 但我找不到与此问题相关的主题 举个例子 我的 POCO 类是 public class Entit
  • 来自 StreamReader 的原始文件字节,幻数检测

    我试图区分 文本文件 和 二进制 文件 因为我实际上想忽略具有 不可读 内容的文件 我有一个文件 我认为它是 GZIP 存档 我试图通过检测幻数 文件签名来忽略此类文件 如果我在 Notepad 中使用十六进制编辑器插件打开文件 我可以看到

随机推荐

  • 用于分割 .csv 文件的批处理文件

    我有一个非常大的 csv 文件 gt 500mb 我希望在命令提示符下将其分解为较小的 csv 文件 基本上是试图在Windows中找到Linux 分割 功能 这必须是一个批处理脚本 因为我的机器只安装了 Windows 并且请求软件很痛苦
  • 确定扑克中的获胜金额而不创建边池

    我正在尝试运行扑克模拟并拥有有关扑克桌的以下数据 每个玩家为底池贡献了多少 每个玩家的 手牌得分 翻牌后 即 如果player 0 score player 1 score 他们并列 我一直在计算每个玩家应该赢得多少 而不需要创建边池并将玩
  • 使用 Vue.Js / Inertia.js 和 Laravel 对结果进行分页

    我正在尝试在 Vue Js 中对来自 Laravel 的数据进行分页 我也在使用 Inertia js 在我的 Laravel 控制器中 我有 data participants User with groups gt select id
  • Javascript:将值返回给回调函数外部的变量[重复]

    这个问题在这里已经有答案了 我有一个非常具体的问题 希望有人可以帮助我 我对 Javascript 很陌生 对 NodeJS 则更陌生 我在用lodash s forIn遍历并添加到数组内的对象的功能 整个事情看起来是这样的 id 20 k
  • Visual Studio 2022 无法构建任何项目

    每次我在 Visual Studio 2022 中构建任何项目时 我在构建输出中得到的都是 Build started 1 gt Build started Project ConsoleApp7 Configuration Debug A
  • 使用 socket.io 处理超大消息

    我有一个 nodejs 项目 它生成多个与套接字 io 通信的进程 该进程既发送数据又接收数据 有时在功能开发过程中 其他程序员可能会犯错误 导致我的套接字基础结构代码发送超过大小 X 例如 超过 500MB 的大消息 我正在寻找一种方法来
  • 如果超过一组特定的行发生更改,如何让 git 仅识别文件已更改?

    在我当前的项目中 我尝试使用 git 来版本控制文本文件 这些文件由生成代码的软件使用 这本身不是问题 问题是每次我生成代码时 它都会自动更新此文件的属性 例如代码生成的日期以及我的名字 你可以想象它看起来像这样 SomeHeader So
  • 将列引导至相同高度并让子列匹配高度

    正如标题所暗示的 我正在努力获得正常的均匀性和干净的线条 table 提供 但具有 Bootstrap 网格系统的响应能力 我用过部分解决方案在这里找到 http www minimit com articles solutions tut
  • Facebook Connect 使用 ASP.NET 会员提供程序与网站集成

    是否有任何最佳实践或示例来说明如何使用会员提供程序 或类似的东西 将 Facebook connect 与现有 ASP NET 应用程序最好地集成 我确信我可以做一些事情 但是 如果有一些关于这方面的信息和最佳实践来减轻任何安全问题 那就太
  • SourceTree 将拉取的文件视为未提交的更改

    在某些未知的情况下 当我使用 SourceTree 拉取时 它会将所有拉取的文件视为未提交的更改 并且不允许再拉 推 除非重新提交或放弃这些更改 如果我丢弃未提交的文件 它将丢弃我的队友应用的所有更改 这有什么问题吗 是否存在已知的错误或其
  • graph6 格式如何工作?

    我一直在到处寻找 g6 或 graph6 格式的工作原理 但我不知道它是如何工作的 我发誓它就像魔法一样 F B w 这是一个以 ASCII 形式表示的图表 它可以由 Wolfram Mathematica Sage 和 Maple 等进行
  • Angular 错误:PostCSS 收到未定义而不是 CSS 字符串

    尝试构建 Angular 项目 但出现以下错误 这个项目上周建得很好 我对使用此项目中的 Dll 的其他项目进行了一些更改 但没有对此项目进行任何更改 我已经花了很多时间来排除故障 但没有运气 感谢任何帮助 错误 PostCSS 收到未定义
  • Facebook SDK 和通过 ShareDialog 问题共享 Play 商店应用程序链接

    我正在尝试使用 Facebook SDK 中的 ShareDialog 共享链接 我的 Google Play 应用程序链接 但问题是 当 URL 是我的应用程序的 Google Play 链接时 其他信息无法正确显示 实际上它只显示链接来
  • 如何让shell脚本在Mac中双击运行?

    我创建了一个 shell 脚本来在 Mac 中运行 jar 文件 bin sh java Xmx512m jar test jar 我已将此脚本重命名为 应用程序命令 双击就可以直接运行 我已经应用了 chmod x 命令使其具有可执行权限
  • PHP header() 不会重定向问题

    我的 header Location index php action messagesent 有问题 在用户按下提交并且 php 运行后 它不会重定向 通常它会重定向 但由于某种原因它不起作用 它只是在点击提交后重新加载页面 但它确实在标
  • 如何删除联系人?

    我正在使用 android 2 1 ContactContract 当我没有将帐户 例如 gmail 帐户 设置为 android 模拟器时 新建一个联系人 但无法在数据库中删除该联系人 ArrayList
  • 添加包含订单计数的列

    如何向数据框中添加一列来说明另一列中某个值出现的顺序计数 这就是我想要的结果 Fruit orderCount 1 Orange 1 2 Banana 1 3 Orange 2 4 Apple 1 5 Orange 3 6 Banana 2
  • 将文本渲染到 kivy 画布

    我正在尝试在奇异的 画布 中绘制自己的图形 现在我有一个红色或绿色的矩形 每秒改变一次颜色 但我想添加一个变化的文本标签 经过一番搜索后 似乎没有可以添加到画布的 文本 指令 我发现了一些关于使用 Label 小部件以及画布说明的参考 但这
  • 有没有替代 imread 命令来减少 matlab 程序中的延迟?

    我在此路径 G newdatabase 中有 2900 个图像 读取图像花费了太多时间 对于点积 它也花费了太多时间 问题 1 是否有任何替代 imread 命令来提高性能 2 是否有任何替代点命令可以提高性能 我尝试过的源代码 srcFi
  • 为什么windows第一次打开文件那么慢,有没有更快的方法

    这是 Windows 7 64 位 专业版使用 考虑一个非常简单的循环 for i 0 i lt names gt size i std string Name names gt at i HANDLE fileHandle CreateF