cocos2d 文件系统使用文件内存映射性能对比
//cocos 修改代码
.....
//性能测试代码
extern "C" {
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
void ptest(){
auto TimeDiff = [](std::function<void()> func,const char* msg){
clock_t t1 , t2;
t1 = clock();
func();
t2 = clock();
CCLOG(msg,t2-t1);
};
auto writef = [](const char* path,int len){
FILE* fp = fopen(path, "wr+");
unsigned char* c = (unsigned char*)malloc(len);
memset(c, 'T', len);
fwrite(c, 1, len, fp);
fflush(fp);
fclose(fp);
fp =nullptr;
};
auto readfile = [](const char* path){
std::string src("src/ptest/datas/");
src.append(path);
FileUtils::getInstance()->getStringFromFile(src);
};
auto readfilea = [](const char* path){
std::string src(FileUtils::getInstance()->getWritablePath());
src.append("/");
src.append(path);
FileUtils::getInstance()->getStringFromFile(src);
};
std::string writepath = FileUtils::getInstance()->getWritablePath();
auto fullpath = [](std::string path,const char* str){ path.append(str); return path; };
writef(fullpath(writepath,"128B.s").c_str(),128);
writef(fullpath(writepath,"512B.s").c_str(),512);
writef(fullpath(writepath,"2K.s").c_str(),2*1024);
writef(fullpath(writepath,"4K.s").c_str(),4*1024);
writef(fullpath(writepath,"16K.s").c_str(),16*1024);
writef(fullpath(writepath,"512K.s").c_str(),512*1024);
writef(fullpath(writepath,"1M.s").c_str(),1*1024*1024);
writef(fullpath(writepath,"2M.s").c_str(),2*1024*1024);
writef(fullpath(writepath,"5M.s").c_str(),5*1024*1024);
writef(fullpath(writepath,"10M.s").c_str(),10*1024*1024);
writef(fullpath(writepath,"20M.s").c_str(),20*1024*1024);
//read
TimeDiff([&](){ readfile("128B.s"); },"assert 128 bytes time:%d");
TimeDiff([&](){ readfilea("128B.s"); },"Writable 128 bytes time:%d"); CCLOG("");
TimeDiff([&](){ readfile("512B.s"); },"assert 512 bytes time:%d");
TimeDiff([&](){ readfilea("512B.s"); },"Writable 512 bytes time:%d"); CCLOG("");
TimeDiff([&](){ readfile("2K.s"); },"assert 2k bytes time:%d");
TimeDiff([&](){ readfilea("2K.s"); },"Writable 2k bytes time:%d"); CCLOG("");
TimeDiff([&](){ readfile("4K.s"); },"assert 4k bytes time:%d");
TimeDiff([&](){ readfilea("4K.s"); },"Writable 4k bytes time:%d"); CCLOG("");
TimeDiff([&](){ readfile("16K.s"); },"assert 16k bytes time:%d");
TimeDiff([&](){ readfilea("16K.s"); },"Writable 16k bytes time:%d"); CCLOG("");
TimeDiff([&](){ readfile("512K.s"); },"assert 512K bytes time:%d");
TimeDiff([&](){ readfilea("512K.s"); },"Writable 512K bytes time:%d"); CCLOG("");
TimeDiff([&](){ readfile("1M.s"); },"assert 1M.s bytes time:%d");
TimeDiff([&](){ readfilea("1M.s"); },"Writable 1M.s time:%d"); CCLOG("");
TimeDiff([&](){ readfile("2M.s"); },"assert 2M.s bytes time:%d");
TimeDiff([&](){ readfilea("2M.s"); },"Writable 512K time:%d"); CCLOG("");
TimeDiff([&](){ readfile("5M.s"); },"assert 5M.s bytes time:%d");
TimeDiff([&](){ readfilea("5M.s"); },"Writable 5M.s time:%d"); CCLOG("");
TimeDiff([&](){ readfile("10M.s"); },"assert 10M.s bytes time:%d");
TimeDiff([&](){ readfilea("10M.s"); },"Writable 10M.s time:%d"); CCLOG("");
TimeDiff([&](){ readfile("20M.s"); },"assert 20M.s bytes time:%d");
TimeDiff([&](){ readfilea("20M.s"); },"Writable 20M.s time:%d"); CCLOG("");
}
}
结果对比:
assert 128 bytes time:1951
Writable 128 bytes time:544
assert 512 bytes time:939
Writable 512 bytes time:0
assert 2k bytes time:1153
Writable 2k bytes time:374
assert 4k bytes time:883
Writable 4k bytes time:0
assert 16k bytes time:1244
Writable 16k bytes time:0
assert 512K bytes time:3366
Writable 512K bytes time:1958
assert 1M.s bytes time:4856
Writable 1M.s time:2206
assert 2M.s bytes time:12929
Writable 512K time:4581
assert 5M.s bytes time:27459
Writable 5M.s time:20102
assert 10M.s bytes time:38956
Writable 10M.s time:24224
//=====================================
cocos2d 测试代码
//#ifdef s
////内存映射测试
//extern "C" {
//#include <time.h>
//#include <stdlib.h>
//#include <stdio.h>
// void ptest(){
// auto TimeDiff = [](std::function<void()> func,const char* msg){
// clock_t t1 , t2;
// t1 = clock();
// func();
// t2 = clock();
// CCLOG(msg,t2-t1);
// };
//
// auto writef = [](const char* path,int len){
// FILE* fp = fopen(path, "wr+");
// unsigned char* c = (unsigned char*)malloc(len);
// memset(c, 'T', len);
// fwrite(c, 1, len, fp);
// fflush(fp);
// fclose(fp);
// fp =nullptr;
// };
//
// auto readfile = [](const char* path){
// std::string src("src/ptest/datas/");
// src.append(path);
// FileUtils::getInstance()->getStringFromFile(src);
// };
//
// auto readfilea = [](const char* path){
// std::string src(FileUtils::getInstance()->getWritablePath());
// src.append("/");
// src.append(path);
// FileUtils::getInstance()->getStringFromFile(src);
// };
//
//
// std::string writepath = FileUtils::getInstance()->getWritablePath();
//
// auto fullpath = [](std::string path,const char* str){ path.append(str); return path; };
//
// writef(fullpath(writepath,"128B.s").c_str(),128);
// writef(fullpath(writepath,"512B.s").c_str(),512);
// writef(fullpath(writepath,"2K.s").c_str(),2*1024);
// writef(fullpath(writepath,"4K.s").c_str(),4*1024);
// writef(fullpath(writepath,"16K.s").c_str(),16*1024);
// writef(fullpath(writepath,"512K.s").c_str(),512*1024);
// writef(fullpath(writepath,"1M.s").c_str(),1*1024*1024);
// writef(fullpath(writepath,"2M.s").c_str(),2*1024*1024);
// writef(fullpath(writepath,"5M.s").c_str(),5*1024*1024);
// writef(fullpath(writepath,"10M.s").c_str(),10*1024*1024);
// writef(fullpath(writepath,"20M.s").c_str(),20*1024*1024);
//
// //read
// TimeDiff([&](){ readfile("128B.s"); },"assert 128 bytes time:%d");
// TimeDiff([&](){ readfilea("128B.s"); },"Writable 128 bytes time:%d"); CCLOG("");
//
// TimeDiff([&](){ readfile("512B.s"); },"assert 512 bytes time:%d");
// TimeDiff([&](){ readfilea("512B.s"); },"Writable 512 bytes time:%d"); CCLOG("");
//
// TimeDiff([&](){ readfile("2K.s"); },"assert 2k bytes time:%d");
// TimeDiff([&](){ readfilea("2K.s"); },"Writable 2k bytes time:%d"); CCLOG("");
//
// TimeDiff([&](){ readfile("4K.s"); },"assert 4k bytes time:%d");
// TimeDiff([&](){ readfilea("4K.s"); },"Writable 4k bytes time:%d"); CCLOG("");
//
// TimeDiff([&](){ readfile("16K.s"); },"assert 16k bytes time:%d");
// TimeDiff([&](){ readfilea("16K.s"); },"Writable 16k bytes time:%d"); CCLOG("");
//
// TimeDiff([&](){ readfile("512K.s"); },"assert 512K bytes time:%d");
// TimeDiff([&](){ readfilea("512K.s"); },"Writable 512K bytes time:%d"); CCLOG("");
//
// TimeDiff([&](){ readfile("1M.s"); },"assert 1M.s bytes time:%d");
// TimeDiff([&](){ readfilea("1M.s"); },"Writable 1M.s time:%d"); CCLOG("");
//
// TimeDiff([&](){ readfile("2M.s"); },"assert 2M.s bytes time:%d");
// TimeDiff([&](){ readfilea("2M.s"); },"Writable 2M.s time:%d"); CCLOG("");
//
// TimeDiff([&](){ readfile("5M.s"); },"assert 5M.s bytes time:%d");
// TimeDiff([&](){ readfilea("5M.s"); },"Writable 5M.s time:%d"); CCLOG("");
//
// TimeDiff([&](){ readfile("10M.s"); },"assert 10M.s bytes time:%d");
// TimeDiff([&](){ readfilea("10M.s"); },"Writable 10M.s time:%d"); CCLOG("");
//
// TimeDiff([&](){ readfile("20M.s"); },"assert 20M.s bytes time:%d");
// TimeDiff([&](){ readfilea("20M.s"); },"Writable 20M.s time:%d"); CCLOG("");
//
// }
//}
//#endif
assert 20M.s bytes time:85986
Writable 20M.s time:50815
cocos2d 文件系统使用文件内存映射性能对比的更多相关文章
- 【JavaNIO的深入研究4】内存映射文件I/O,大文件读写操作,Java nio之MappedByteBuffer,高效文件/内存映射
内存映射文件能让你创建和修改那些因为太大而无法放入内存的文件.有了内存映射文件,你就可以认为文件已经全部读进了内存,然后把它当成一个非常大的数组来访问.这种解决办法能大大简化修改文件的代码.fileC ...
- java大文件读写操作,java nio 之MappedByteBuffer,高效文件/内存映射
java处理大文件,一般用BufferedReader,BufferedInputStream这类带缓冲的Io类,不过如果文件超大的话,更快的方式是采用MappedByteBuffer. Mapped ...
- .NET Framework自带的文件内存映射类
最近一直为文件内存映射发愁,整个两周一直折腾这个东西.在64位系统和32位系统还要针对内存的高低位进行计算.好麻烦..还是没搞定 偶然从MSDN上发现.NET 4.0把内存文件映射加到了.NET类库中 ...
- MMAP文件内存映射
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- c++/MFC 封装好的文件内存映射类
整理日: 2015年2月16日 首先介绍内存映射文件操作------函数的用法以及先后执行顺序 // 第一步:创建文件 HANDLE hFile = CreateFileForMapping(_T(& ...
- JMeter性能测试基础 (3) - 使用参数文件做搜索引擎性能对比
本篇文章主要对如何在JMeter中进行URL的参数进行配置进行介绍,通过CSV文件配置参数数据,对baidu.sogou.haosou进行搜索性能对比测试. 1.建立测试计划.线程组,并在线程组下添加 ...
- 使用Java内存映射(Memory-Mapped Files)处理大文件
>>NIO中的内存映射 (1)什么是内存映射文件内存映射文件,是由一个文件到一块内存的映射,可以理解为将一个文件映射到进程地址,然后可以通过操作内存来访问文件数据.说白了就是使用虚拟内存将 ...
- Java NIO内存映射---上G大文件处理(转)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了java中内存映射的原理及过程,与传统IO进行了对比,最后,用实例说明了结果 ...
- 《Java核心技术卷二》笔记(二)文件操作和内存映射文件
文件操作 上一篇已经总结了流操作,其中也包括文件的读写.文件系统除了读写以为还有很多其他的操作,如复制.移动.删除.目录浏览.属性读写等.在Java7之前,一直使用File类用于文件的操作.Java7 ...
随机推荐
- Error in deleting blocks.
2014-08-24 22:15:21,714 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Error processing datan ...
- APP兼容性测试
一.APP兼容性范围以及问题 1.硬件 各个硬件结构 2.软硬件之间 硬件dll库(C++) 软硬件之间的通信,各个厂商提供的ROM 3.软件 浏览器.操作系统.数据库.手机.功能兼容性(功能修改,二 ...
- SQLyog 使用笔记,自增主键数据冲突错误
select max(id) from test ; desc test ; insert into test (a,b,c) values ('abc','123-213','test'); RE ...
- c++(类)构造函数、复制构造函数
复制构造函数是一种特殊的构造函数,它的作用是用一个已经存在的对象去初始化另一个对象.一般情况下不需要自行定义复制构造函数,系统默认提供一个逐个复制成员值的复制构造函数. 何时要使用呢? 1.将新对象初 ...
- React.js基础知识
一. react.js的基本使用方法 (1)快速使用,hello world <div id="app"></div> <script src=&qu ...
- 编写一个 Chrome 浏览器扩展程序
浏览器扩展允许我们编写程序来实现对浏览器元素(书签.导航等)以及对网页元素的交互, 甚至从 web 服务器获取数据,以 Chrome 浏览器扩展为例,扩展文件包括: 一个manifest文件(主文件, ...
- Git菜鸟
1.git 和svn的差异 git和svn 最大的差异在于git是分布式的管理方式而svn是集中式的管理方式.如果不习惯用代码管理工具,可能比较难理解分布式管理和集中式管理的概念.下面介绍两种工具的工 ...
- 51nodeE 斜率最大
题目传送门 这道题只要证明最佳解一定在相邻两个点之间的好啦 这个自己证一证就okay啦 而且我发现n方的算法可以过耶... #include<cstdio> #include<cst ...
- (转)Vim 脚本语言
2012 年 10 月 20 日 by name5566 Categories: Computer Science, Tools 参考文献列表: http://vimdoc.sourceforge.n ...
- HDU1024(最大M子段和)
Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...