延迟读取 D 中的文件

2023-12-26

我正在用 D 编写一个目录树扫描函数,它尝试将 grep 和 file 等工具结合起来,并且仅当文件中的内容满足条件时才对文件中的内容进行条件 grepnot匹配一组指示文件类型的魔术字节,例如 ELF、图像等。

在最小化文件 io 方面,使此类排除逻辑尽可能快地运行的最佳方法是什么?如果我只需要在开头读取一些魔术字节,我通常不想读取整个文件。然而,为了使代码更具未来通用性(一些魔法可能位于末尾或其他地方而不是开头),如果我可以使用类似 mmap 的接口仅在需要时才从磁盘中延迟获取数据,那就太好了读。数组接口还简化了我的算法。

Is D's std.mmfile在这种情况下最好的选择是什么?

Update:根据这篇文章,我猜建议使用 mmap:http://forum.dlang.org/thread/[电子邮件受保护] http://forum.dlang.org/thread/dlrwzrydzjusjlowavuc@forum.dlang.org

如果我只需要作为数组(opIndex)进行读取访问,那么使用有什么缺点std.mmfile over std.stdio.File or std.file?


如果你想用 Phobos 懒惰地读取文件,你几乎有三个选择

  1. Use std.stdio.File's byLine并一次读一行。

  2. Use std.stdio.File's byChunk并一次读取特定数量的字节。

  3. Use std.mmfile.MmFile并将文件作为数组进行操作,利用mmap在引擎盖下以避免读取整个文件。

我完全预计#3 将是最快的(分析可能会有所不同,但考虑到它的出色程度,我会感到非常惊讶mmap是)。它也可能是最容易使用的,因为您可以操作一个数组。唯一的问题是MmFile我知道的是,它是一个类,可以说它应该是一个引用计数的结构,以便在完成后它会自行清理。现在,如果您不想等待 GC 清理它,您必须手动调用unmap在其上或使用destroy销毁它而不释放它的内存(尽管destroy应谨慎使用)。使用可能有一些缺点mmap(这自然意味着使用有一个缺点MmFile),但我不知道。

将来,我们最终将得到一些基于范围的流 I/O 内容,这可能更接近您需要的内容,而无需实际使用mmap,但这还没有完成,并且mmap非常酷,很有可能使用它会更好MmFile.

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

延迟读取 D 中的文件 的相关文章

随机推荐

  • 防止 Resharper“可能的空引用异常”警告

    假设我有一个带有只读属性的接口和一个具体类 其中该属性在构造函数中实例化并标记为只读 internal interface IExample ObservableCollection
  • 我必须在这个循环的开头添加什么?

    如何使用 for 循环读取以下文件 循环可以忽略文件名中的字符吗 abc 1 TXTcde 2 TXT丝氨酸3 TXTWSZ 4 TXTaqz 5 TXTiop 6 TXT 我必须在这个循环的开始添加什么 for i 1 1 6 nom f
  • 大括号之后和右括号之前的 Reshaper 力空间

    Resharper 给了我这个 new MyObject Prop1 prop1 Prop2 prop2 但我想要 new MyObject Prop1 prop1 Prop2 prop2 目前它违反了我的 StyleCop 规则 我认为这
  • 让MySQL用户创建数据库,但只允许访问自己的数据库

    我希望有multipleMySQL 用户能够发出类似命令 CREATE DATABASE dbTest 但我也希望这些用户中的每一个都能够仅查看和访问他们的own数据库 我能找到的只是如何由 DBA 创建数据库并将该数据库的权限授予特定用户
  • ActionCable - 如何显示已连接用户的数量?

    我正在尝试使用 Action Cable 创建一个简单的类似聊天的应用程序 规划扑克应用程序 我对术语 文件层次结构以及回调的工作方式有点困惑 这是创建用户会话的操作 class SessionsController lt Applicat
  • 如何在 Node JS 中间件中从多部分表单数据获取请求正文?

    我知道使用以下方法很容易获得请求的主体 app post api req res gt conosle log req body 但我的问题与上面不同 这是我的index js 文件 入口文件 const express require e
  • 在gtk c中的对话框中打印输入框的值

    最近在用c语言进行gtk 的工作 我尝试在两个回调之间进行通信dialog并且不在主窗口 像这儿 https stackoverflow com questions 44975598 how to communicate between c
  • MySQL:如果列包含多个ID,如何使用左连接获取数据?

    假设如下 表 信息 id target ids 1 2 2 3 4 1 4 2 3 1 表 目标 id value 1 dog 2 cat 3 tiger 4 lion Using 左连接 我期待这样的事情 id target ids va
  • 存储矢量 XNA 动画

    当我遇到这个问题时 我正在研究 XNA C 我需要存储易于编辑的动画数据 以便我的游戏能够渲染和播放它 是这样的 我有一个纹理从 0 0 到 800 600 像素飞过屏幕 这将持续 5 秒 我如何用数据表示它并编写它 以便游戏能够解释并执行
  • 将页脚保持在底部

    我有一个页脚位于正文内部的布局 因为我的侧边栏高度为 100 事实是 当正文内容的高度小于屏幕高度时 我需要将页脚保持在底部 这里我附上一个小提琴示例 https jsfiddle net ndmez9y1 可以看到页脚就在正文最后一行的下
  • glib 网络连接示例

    你能建议一些用 glib gio 库制作的网络连接示例吗 有一个相当不错的参考手册 http developer gnome org gio stable pt02 html 但即使对于基本的东西也没有完整的例子 它将作为程序的一部分用于简
  • 将对象添加到DataTable并创建动态GridView

    我做了很多这样的工作 并使用这种技术创建了一个下拉菜单和一个树视图 一个 ajax 调用 用于动态创建控件并将它们返回到使用 jqueryajax 和 C 完全构建和配置的页面 但我坚持从我的类对象创建数据表 该控件显然返回一个双循环 gr
  • 错误 400:invalid_scope“https://www.googleapis.com/auth/chat.bot”

    新的谷歌环聊聊天的文档说你需要授权范围https www googleapis com auth chat bot https developers google com hangouts chat reference rest v1 sp
  • 转换 SQL Server 日期时间字段以仅比较日期部分,并使用索引查找

    我一直在做一个convert varchar datefield 112 在我在 SQL Server 中的 之间 查询中使用的每个日期字段上 以确保我只考虑日期并且不会遗漏任何基于日期时间字段的时间部分的日期 现在 我听说转换不可索引 并
  • 如何在 R 中用 0 替换 NaN 的矩阵元素

    我有一个看起来像这样的矩阵 a matrix c 5 10 NaN NaN 4 5 3 NaN NaN 2 nr 5 a 1 2 1 5 5 2 10 3 3 NaN NaN 4 NaN NaN 5 4 2 现在我想要那些NaN被零替换 我
  • 通过 php 上传 OneDrive [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在寻找通过 php 将文件上传到 Microsoft OneDrive 的代码示例 我已经创建了一个微软帐户并创建了一个应用程序
  • IntelliJ IDEA - 导航到测试主题

    我在使用 IntelliJ IDEA 时尝试应用 TDD 原则 但遇到了问题 我不知道是否有我不知道的功能或插件可以帮助我 我刚刚发现您可以轻松导航到编辑器中与当前类相对应的测试类CTRL SHIFT T 如果测试类不存在 它会要求您创建它
  • 如何<使用> SVG 中具有不同“开始”点的已定义对象的多个动画实例

    假设我们在 SVG 中有以下定义的对象 A
  • 指定 Accept: 标头时 Apache 406 不可接受

    我尝试自己找到解决方案 但其他 406 问题的解决方案对我没有帮助 我已在 Mac 上启用 PHP 和 Apache Web 服务器 我发现如果我传递带有 Accept 标头集的请求 POST 或 GET 则会失败并出现 406 错误 cu
  • 延迟读取 D 中的文件

    我正在用 D 编写一个目录树扫描函数 它尝试将 grep 和 file 等工具结合起来 并且仅当文件中的内容满足条件时才对文件中的内容进行条件 grepnot匹配一组指示文件类型的魔术字节 例如 ELF 图像等 在最小化文件 io 方面 使