zoukankan      html  css  js  c++  java
  • MMF (memory mapping file)

    1. 对于小文件,windows提供的一般读取文件的方法完全够用了,而且performance, capacity都还可以。做法一般都是:一次把整个文件读取到内存中,再在内存中对其进行读取;主要是通过一次读取来减少I/O操作所带来的performance损耗。

    2. 对于大文件,尤其是动辄几G,十几G的文件(CAD文件是典型的一类),常规方法就不行了。很明显的一点就是:一次读取到内存,空间不够用了(<2G的进程空间可供使用;你也不可能全用了)windows提供了MMF(内存映射文件)机制来解决这种情况。具体API的使用这里略。只列一下读取huge file的一般思路:

    1)映射文件开头的映像。
    2)对该映像进行访问。
    3)取消此映像
    4)映射一个从文件中的一个更深的位移开始的新映像。
    5)重复步骤2,直到访问完全部的文件数据。

    内存映射文件概述

    内存文件映射也是Windows的一种内存管理方法,提供了一个统一的内存管理 特征,使应用程序可以通过内存指针对磁盘上的文件进行访问,其过程就如同对加载了文件的内存的访问。通过文件映射这种使磁盘文件的全部或部分内容与进程虚 拟地址空间的某个区域建立映射关联的能力,可以直接对被映射的文件进行访问,而不必执行文件I/O操作也无需对文件内容进行缓冲处理。内存文件映射的这种 特性是非常适合于用来管理大尺寸文件的。使用内存映射文件的3个目的:

    (1)            系统使用内存映射文件来加载和执行.exe和dll文件。这极大的节省了系统页文件空间,也缩短了启动应用程序所需的时间。
    (2)            使用内存映射文件访问磁盘上的数据。这既避免了对文件执行文件I/O(输入/输出)操作,也避免了为文件的内容申请缓冲区。
    (3)            使用内存映射文件在多个进程间共享数据。Windows也提供了其他进行间通讯的方法-但是这些方法都是使用内存映射文件实现的。
    3.  both native win32 and .net 4.0 support using MMF directly. Boost library has its implementation.

    参考:

    http://blogguan.blog.sohu.com/77220236.html

    http://msdn.microsoft.com/en-us/library/ms810613.aspx

    http://msdn.microsoft.com/en-us/library/dd997372.aspx

  • 相关阅读:
    JVM(1)——Java内存区域与内存溢出异常
    LeetCode:88 合并两个有序数组
    Oracle数据库部署二
    数据库—Oracle数据库部署
    Inscape 如何旋转对象
    C# ListView 虚拟模式(VirtualMode)的使用 要义
    C# 中 throw 与 throw ex 的区别。
    处于 VirtualMode 中时,ListView RetrieveVirtualListItem 事件需要每个 ListView 列的列表视图
    C# ListView 虚拟模式(VirtualMode)下的 坑 ?
    C# 的 params
  • 原文地址:https://www.cnblogs.com/taoxu0903/p/1970983.html
Copyright © 2011-2022 走看看