C/C++快速读写磁盘数据的方法-块读取/异步/优化分析算法/内存文件映射的原理和使用

快速读写磁盘数据的方法:

1.块读取:一下子将数据读取到内存的(无论是文本还是二进制),而不是一行行的读取。

2.异步的IO,创建多线程,或者使用重叠IO,IO复用,异步的事件回调通知机制(可以用事件对象,信号驱动来实现)。

3.优化分析文件的算法和尽量延后分析,分析算法里面频繁的申请字符串内存和释放字符串内存,尽量用指针解析出来,分析文件的内容可以延期到使用的时候才分析。

如果不注意,不小心 ,读取文件的主要性能消耗将会在这里,所以需要特别高的重视。

4.使用内存文件映射, window是CreateFileMapping,MapViewOfFile,UnmapViewOfFile,CloseHandle;linux是用mmap,munmap,msync,free。

内存文件映射的使用:

  (1)大数据量文件的读取,有效的提高磁盘和内存间数据通信的性能;

  (2)进程间快速的共享内存,实现进程间高效的通信。


内存映射文件性能高于普通IO的原因:

内存文件映射和普通的文件IO都是要通过文件系统和硬盘驱动拷贝数据到内存中,内存文件映射数据越大越快主要是:

(1)实际拷贝数据前,需要建立映射信息,内存文件映射已经提前准备好了映射关系,内核调度好了进程内的内存块,交付给内核进行了预先处理,内存文件映射会消耗掉一些时间。

(2)实际拷贝时候,内存文件映射将磁盘数据直接拷贝到用户进程内存空间只进行了一次拷贝,而普通的IO是先将文件拷贝到内核缓存空间,然后才拷贝到用户进程内存空间,进行了两次拷贝。

下面是一个使用普通的fread函数和内存映射文件函数,读取不同大小的磁盘文件的性能分析表:

文件大小(KB)

I/O函数读取时间(ms)

内存映射读取时间(ms)

综合:当读写磁盘文件的数据较小(少于1MB)时候,使用内存文件映射和普通IO是差异很小的,所以建议使用普通IO就可以了;当很多文件的大小在几十MB, 几百MB, 或者1GB以上的文件数据需要进行较频繁的访问,或者一开始需要全部加载这些大文件的时候,那么就需要考虑使用内存文件映射了。
 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
美团餐馆预定信息的管理与分析涉及多个算法原理,以下是其中一些常用的算法原理: 1. 数据存储与管理:使用合适的数据结构来存储和管理餐馆和预定信息。常用的数据结构包括链表、数组、哈希表等。例如,可以使用链表或数组来存储餐馆信息和预定信息,使用哈希表来提高查询效率。 2. 排序算法:对预定信息进行排序可以方便后续的分析和查询。常用的排序算法有冒泡排序、插入排序、选择排序、快速排序、归并排序等。根据实际需求和数据规模选择合适的排序算法。 3. 统计分析:对预定信息进行统计分析可以得到有关预定量、预定时间分布等的信息。常用的统计分析算法包括频率统计、累计统计、均值计算、方差计算等。 4. 查找算法:根据特定条件查找预定信息可以提供特定需求的查询功能。常用的查找算法有线性查找、二分查找、哈希查找等。选择合适的查找算法可以提高查询效率。 5. 数据挖掘与机器学习算法:对预定信息进行挖掘和建模可以得到更深入的分析结果。常用的数据挖掘和机器学习算法包括聚类算法、分类算法、回归算法等。根据实际需求选择合适的算法进行模型建立和分析。 以上仅是一些常用的算法原理示例,实际的算法原理与实现步骤可能因具体需求和数据特征而有所不同。在设计过程中,您需要综合考虑数据结构和算法原理,选择合适的方法来实现美团餐馆预定信息的管理与分析

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值