延迟读取 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 中的文件 的相关文章

  • 加快写入多个图像 TIFF 的速度?

    我正在尝试将图像堆栈写入 TIFF 文件 图像大小为 256 256 像素 每个堆栈包含 1000 张图像 编写其中一个文件大约需要 4 分钟 所以我的代码很可能有问题 这就是我正在做的 void Tiff WriterSplit floa
  • 为什么 mmap 在 iOS 上失败?

    我正在尝试使用 mmap 在 iOS 上读取和播放音频文件 它适用于最大约 400MB 的文件 但当我尝试 500MB 文件时 出现 ENOMEM 错误 char path NSBundle mainBundle pathForResour
  • 在 GTK+ (gtkD) 中处理按键

    我正在玩gtkD http www dsource org projects gtkd GTK 的 D 绑定 我有一个window对象 实例gtk MainWindow 我想处理它的按键 How 如何处理特殊键 例如箭头键 pgup pgd
  • 页面其余部分完成加载后延迟加载 html5 视频

    我有一个视频元素用作我正在构建的页面底部部分的背景 我试图通过将 src 存储为 data src 属性并使用 jQuery 在其他资源加载后将其应用到 src 属性 因为它不是英雄图像或任何东西 我想加载海报以节省加载时间 然后稍后加载视
  • 如何正确关闭保存文件句柄

    我正在开发一个与 USB 设备通信的 C 项目 我打开连接 DllImport Kernel32 dll SetLastError true static extern Microsoft Win32 SafeHandles SafeFil
  • 在VB.NET中获取文件修改日期

    我的文件夹中有许多文件 我需要获取最后修改日期 所以我用了 FDate IO File GetLastWriteTime FName 对于某些文件 它工作正常 但对于其他文件 我得到的日期为 1 1 1601 但是当我在 Windows 资
  • 为什么使用自动激活文件句柄的三参数开放调用是 Perl 最佳实践?

    我有两个关于 Perl 的问题open功能 1 我好像记得从Perl 最佳实践的 3 参数版本open比两个参数版本更好 例如 open OUT gt gt file vs open OUT gt gt file 这是为什么 前几天我试图告
  • 加快写入文件的速度

    我已经分析了一些我用 cProfile 继承的遗留代码 我已经做了很多有帮助的更改 例如使用 simplejson 的 C 扩展 基本上 该脚本将数据从一个系统导出到 ASCII 固定宽度文件 每一行都是一条记录 并且有许多值 每行有 71
  • mmap() 和锁定文件

    考虑以下代码片段 故意缺少错误处理 void foo const char path off t size int fd void ret fd open path O RDWR lockf fd F LOCK 0 ret mmap NUL
  • 为什么文件更新时“如果较新则复制”不复制文件?

    我在 Visual Studio Express 中有一个解决方案 如下所示 The LogicSchemaC 中的类 将在运行时解析指定的 XML 文件 以下是在main的方法Program cs LogicSchema ls new L
  • 有没有比这更快的方法来查找目录和所有子目录中的所有文件?

    我正在编写一个程序 需要在目录及其所有子目录中搜索具有特定扩展名的文件 这将在本地驱动器和网络驱动器上使用 因此性能是一个问题 这是我现在使用的递归方法 private void GetFileList string fileSearchP
  • 从 Java 小程序访问 input type="file" 完整路径

    可以使用 netscape javascript JSObject API 从小程序访问 HTML DOM 但是 如果我查询输入类型 文件 的值 在某些浏览器 Opera 上我会得到所选文件的完整路径 但在其他浏览器 Firefox Chr
  • 用 ruby​​ 漂亮地打印到文件

    我正在尝试将哈希打印到文件中 我尝试了unix重定向 逐步添加不同的标志 echo pp mymap tee summary out 2 gt 1 和文件IO my file File new dir myfile out w my fil
  • C - 为什么我无法映射较小(256UL 或更小)的内存?

    请告诉我 为什么我的简单应用程序无法映射较小的内存 而且 为什么有这样一个特定的边界 257UL define MAP SIZE 256UL or below fail define MAP SIZE 257UL ok include
  • 读取文件而不从操作系统页面缓存中逐出

    这主要适用于 Linux 或者理想情况下适用于任何 POSIX 系统 当我阅读以下页面时 我正在寻找一种读取大量文件 其中任何一个文件本身可能高达 1GB 的方法 具有以下特征 如果相关磁盘页面已在文件系统缓存中 则使用该页面 如果相关页面
  • 文件加密与解密问题

    我一直在尝试在 VC Express 2010 中加密和解密文件 我见过的所有教程和文档都需要两个FileStreams 来加密文件 一个用于读取未加密的版本 另一个用于加密 当我实际编写代码时 它不断抛出错误 告诉我它无法打开该文件 因为
  • GtkD(D语言的Gtk+绑定)为什么要编译它?

    我最近一直在使用 GtkD 和 D 编程语言来创建本机应用程序 我已经下载了所有必要的文件并运行了所有内容 因此我现在可以编译并生成示例应用程序 我的问题是 在一些指南中 它告诉您在您正在使用的平台上编译 GtkD 但这有什么意义呢 编译后
  • 当单词以“|”分隔时如何读取文件(埃因霍温)?

    在Python中 我有一个文件 其中的单词由 例如 city state zipcode 我的文件阅读器无法区分单词 另外 我希望我的文件阅读器从第 2 行而不是第 1 行开始 如何让我的文件阅读器分隔单词 import os import
  • 配置 Jackson 在 Spring Boot 中省略延迟加载属性

    在纯java配置的spring boot mvc项目中如何配置Jackson以省略延迟加载属性 使用最新版本的 Spring Boot 这要容易得多 com fasterxml jackson databind Module 类型的任何 b
  • Applescript 应用程序从文件中读取

    我有一个已编译的 AppleScript 应用程序 已将其移至 Windows 服务器 然后我想将一个文本文件插入到应用程序中 在 Windows 上看起来像一个 zip 文件 myapplescript app Contents Reso

随机推荐

  • 防止 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 方面 使