开启缓读写的情况下:选择a文件右键复制(a文件100m)粘贴,即在当前目录下生成a-副本文件,我们为了方便叫它b文件;这个过程中我们查看primeCache的监视窗口,读取总计100m,读取缓存0,请求写入100m,实际写入0,空闲缓存减少200m.
然后继续粘贴生成a-副本2文件,简称c文件。这个过程中我们查看primeCache的监视窗口,读取总计100m,读取缓存0,请求写入200m,实际写入0,空闲缓存减少300m.
现在分析:在粘贴时是一闪即过的,我们知道这是因为该文件已经缓读了,而且也开启了缓写,但是这个请求写入是动态变化的,默认的监视刷新是1s,我们由此判断,primeCache是从内存中a缓存拷贝数据的。此时内存中存在a文件的缓读,b,c文件的缓写,但是其实三个内容是一模一样的。
不久浪费了内存,而且还多了读取,写入的操作,即使这个读写是在内存中也是浪费了cpu。
程序员都知道有个东西叫写时拷贝,即如果只是读取而没有产生写或者修改操作时是不会生成拷贝的。
建议此处用上写时拷贝,只有修改b,c文件才在内存中拷贝一份。而缓写时间到了的时候直接使用a缓读内容写入磁盘就好了。
同时我还有个疑问希望开发者回答:你们在截获系统api后发现要读取的文件存在于缓存中,会不会和磁盘上的文件进行校验。比如以下情况:
在缓存中存在a文件,然后我暂停了缓存,修改了a文件的内容,之后继续使用缓存,那么下次读取a文件会不会进行校验。因为如果不校验有可能还是获取到未修改前的文件。如果校验了,是基于什么方法?是对比最后修改日期吗?那如果我连最后修改日期也修改了...
不测试了,直接给答案吧,管理员。
缓存的智能处理
Re: 缓存的智能处理
PrimoCache并不知道用户对文件的任何操作,它仅仅接收Windows请求的读数据或写数据命令并进行处理,但是不会去分析数据的具体内容。suge940322761 写了:建议此处用上写时拷贝,只有修改b,c文件才在内存中拷贝一份。而缓写时间到了的时候直接使用a缓读内容写入磁盘就好了。
您提到的这个基于数据内容的缓存处理,其实相当复杂。Windows在最近的服务器版本才支持有这类似的特性。
PrimoCache不是基于文件的缓存系统,它是位于磁盘级的处理软件。因此没有任何文件信息,只有原始的数据。这原始的数据可能是文件系统的元数据,也可能是文件的某个片段数据。suge940322761 写了:同时我还有个疑问希望开发者回答:你们在截获系统api后发现要读取的文件存在于缓存中,会不会和磁盘上的文件进行校验。比如以下情况:
在缓存中存在a文件,然后我暂停了缓存,修改了a文件的内容,之后继续使用缓存,那么下次读取a文件会不会进行校验。因为如果不校验有可能还是获取到未修改前的文件。如果校验了,是基于什么方法?是对比最后修改日期吗?那如果我连最后修改日期也修改了...