【问题标题】:Memory-mapped file misunderstanding?内存映射文件误解?
【发布时间】:2012-03-27 09:07:30
【问题描述】:

根据Msdn

内存映射文件使程序员能够处理极大的 文件,因为内存可以同时管理,并且它们允许 对文件的完整、随机访问,无需查找

问题:

Memory Mappe File 的整体原理是写入/读取字节,并根据位置和偏移量创建视图。

“无需寻找”是什么意思?

必须知道开始和结束(偏移量)才能读取文件。

所以寻求确实存在!

我确实在这个庞大的字节数组中寻找......

我错过了什么?

【问题讨论】:

    标签: c# .net-4.0 memory-mapped-files


    【解决方案1】:

    使用内存映射文件时,您基本上会获得一个指向内存块的指针,并将其作为某种类型的数组进行访问。然后访问文件中的特定位置是基于索引和/或偏移量的内存访问。操作系统在背后无形地管理所需的查找。

    【讨论】:

      【解决方案2】:

      MMF 具有随机访问权限,而普通文件则有 1 个特定的读取或写入点。

      使用偏移量(和指针等)与在流中查找不同。

      我必须知道开始和结束(偏移量)才能读取文件

      您不是“读取文件”,而是访问内存并需要地址,而不是流位置。

      【讨论】:

      • .1。这不是明智的寻找磁盘,这意味着没有像在流中那样寻找。您可以在文件中跳转,因为您将其作为数组访问。 STREAM 你必须改变位置 - 这在编程方面要笨拙得多。
      • 如果我有一个 100 mb 的记录文件(Person 类)。它不可能像那样访问它的中间内容。所以我必须从头开始,然后按记录读取记录,直到所需的记录。我不能只是进入阵列的中间...?
      • 如何访问 MMF?作为流?
      • @HenkHolterman 可以说我有一个巨大的字节数组,我用起始偏移量创建一个视图......
      【解决方案3】:

      MMF 是实际“映射”到虚拟内存空间的文件,因此您可以将其视为(非常笼统的比较)Dictionary 关于 Array.通过访问该文件的 chunks 以继续处理非常大的文件时,这是一种舒适的(如果不是说唯一可能的话)解决方案。我想说,可能每个视频编辑软件都使用这种技术。没有其他办法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-23
        • 1970-01-01
        • 2010-11-01
        • 2011-05-14
        • 2016-12-08
        • 2010-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多