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 ...
随机推荐
- SQL 学习小笔记
1.FOUND_ROWS() 题目: ,; 在上边sql中使用什么选项可以使 SELECT FOUND_ROWS()忽略LIMIT子句,返回总数? *答案* : SQL_CALC_FOUND_ROWS ...
- CentOS 6.5 Linux 安装 openoffice
资源准备: Apache_OpenOffice_4.1.4_Linux_x86-64_install-rpm_zh-CN.tar.gz 编译安装: 本人资源包放在 /opt/moudles 中, 解压 ...
- IntValue()方法 和 ValueOf()方法
intValue() 1.intValue()是java.lang.Number类的方法,Number是一个抽象类.Java中所有的数值类都继承它.也就是说,不单是Integer有intValue方法 ...
- rest service技术选型
MySql workbench下载 http://dev.mysql.com/downloads/workbench/ 最好的8个 Java RESTful 框架 http://colobu.com/ ...
- 【AtCoder】ARC082 F - Sandglass
[链接]F - Sandglass [题意]给定沙漏A和B,分别装着a和X-a的沙子,开始时A在上B在下,每秒漏1,漏完不再漏.给定n,有n个时刻ai沙漏倒转.给定m个询问,每次询问给定初值a和时刻t ...
- Chrome浏览器跨域插件
Moesif Origin & CORS Changer 这个插件允许发送跨域请求,重写Request Origin 和 CORS headers. 解决Debug Javascript时候出 ...
- webdriver函数
import sys; print('%s %s' % (sys.executable or sys.platform, sys.version)) PyDev console: starting. ...
- Google I/O完整盘点,这才是地球上最「性感」的发布会
https://news.cnblogs.com/n/569588/ Google.ai:展现 AI 最好的一面 Google 今天新发布了第二代的 Tensor 处理单元(TPU),这是一个云计算硬 ...
- json相关注解和序列化与反序列化
使用jackson进行序列化时,往往会遇到后台某个实体对象的属性为null,当序列化成json时对应的属性也为null,可以用以下的注解方式完成当属性为null时不参与序列化: @JsonSerial ...
- PL/SQL 07 触发器 trigger
--触发器 触发器有三类: 数据操作触发器 用before触发器进行数据校验 用after触发器进行级联操作 语句触发器限制数据的操作和记录操作日志 instead of 触发 ...