CE6的文件读写过慢的问题(可能和cache相关)

[复制链接]
查看11 | 回复10 | 2021-1-27 05:45:03 | 显示全部楼层 |阅读模式
定制CE6系统,使用的是inand作为存储器,代替nandflash.
现在客户的程序用fopen和fread函数读数据的时候很慢,
我们专门写了一个很简单的测试fopen和fread函数的程序,这个程序会从一个10MB的文件中随机读取一定的数据,每次执行读取1000次,这1000次都是随机长度和随机位置,
发现系统刚开机和suspend/resume后的第一次执行这个程序耗时3秒多,后续每次都会在5秒以上。
也就是说刚开机和resume后读一个文件很快,下次再读就很慢。
注册表中设置
[HKEY_LOCAL_MACHINE\System\StorageManager\FATFS\Filters\CacheFilt]
"EnableFileCache"=dword:0
或者是在组件中删除filecache组件都没有用。
"EnableFileCache"=dword:0时表现和上边描述的效果一样。
而如果直接删除filecache组件则每次都是5秒以上,不会有3秒的情况。
请各位了解的朋友提供一些帮助。
非常感谢!!!
分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:45:03 | 显示全部楼层
老兄,前几天刚有人拿我的Sate210测试过SD卡的读写速度问题
你看看这个帖子
http://bbs.csdn.net/topics/390408845
回复

使用道具 举报

千问 | 2021-1-27 05:45:03 | 显示全部楼层
读的时候不开cache好像会快点。你改一下注册表。试试。
回复

使用道具 举报

千问 | 2021-1-27 05:45:03 | 显示全部楼层
[HKEY_LOCAL_MACHINE\System\StorageManager\FATFS\Filters\CacheFilt]
"EnableFileCache"=dword:0
哦,你删除这个了,那你的软件writefile改一下如楼上帖子。
我现在的S5pv210wince6.0也是支持INand和SD卡的了。感觉启动速度很快啊。7S没优化,如果优化估计5S就能启动系统了。不用什么XIP。
回复

使用道具 举报

千问 | 2021-1-27 05:45:03 | 显示全部楼层
引用3楼gooogleman的回复:[HKEY_LOCAL_MACHINE\System\StorageManager\FATFS\Filters\CacheFilt]
"EnableFileCache"=dword:0
哦,你删除这个了,那你的软件writefile改一下如楼上帖子。
我现在的S5pv210wince6.0也是支持INand和SD卡的了。感觉启动速度很快啊。7S没优……


[HKEY_LOCAL_MACHINE\System\StorageManager\FATFS\Filters\CacheFilt]
"EnableFileCache"=dword:0
加了这个似乎也没什么效果,并且同样的fread在他们的CE6机器上很快,他们给了那台机器关于文件系统的一些注册表,没看到什么差异,所以现在不知道还有其它哪里可以影响了
回复

使用道具 举报

千问 | 2021-1-27 05:45:03 | 显示全部楼层
文件小的时候好像不太会,比如写10个1M的文件比写1个10M快。
我有个程序有记录log,结果,文件越写越大,到了后面特别慢,其实每次写的内容并不是特别多。
回复

使用道具 举报

千问 | 2021-1-27 05:45:03 | 显示全部楼层
测试程序的读写函数贴出来看看,我前段时间刚测过,帮你分析分析
回复

使用道具 举报

千问 | 2021-1-27 05:45:03 | 显示全部楼层
#defineREAD_TIMES1000
voidread(void)
{
FILE*fp=_wfopen(FilePath1,L"rb");//filesizemustexceed8MB!
BYTE*buf=newBYTE[4*1048576];//4MBbuffer
srand(GetTickCount());
READRead[READ_TIMES];
for(inti=0;i4*1048576)Read.offset=4*1048576;
if(Read.length>4*1048576)Read.length=4*1048576;
}
DWORDtc1=GetTickCount();
for(inti=0;i
回复

使用道具 举报

千问 | 2021-1-27 05:45:03 | 显示全部楼层
你是fopen打开文件的啊?
这里面有个问题,wince默认是开cache的,建议你用createfile试试,因为createfile里有个参数可以设置NO_BUFFER的FLAG,这样就会明显加快文件的读写速度,这个可以确认,因为我上周刚测过
回复

使用道具 举报

千问 | 2021-1-27 05:45:03 | 显示全部楼层
这个问题我们了解过,客户是CE5上的AP移植到CE6上,用的是fopen,不想改程序,而这个两个fopen的程序在他们另外一台也是INAND的CE6机器上速度是很好的,所以现在是必须我们改OS,而不是改AP。
并且用了createfile的FILE_FLAG_NO_BUFFERING后,读的速度普遍是5秒多,而fopen的在开机第一次运行的时候是3秒左右,后边才会超过5秒。
也就是说开机第一次运行fopen比createfile的FILE_FLAG_NO_BUFFERING快很多,再次执行相同的函数就会慢很多。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行