looksail
荣誉会员
荣誉会员
  • 注册日期2005-05-22
  • 最后登录2014-03-15
  • 粉丝2
  • 关注0
  • 积分1016分
  • 威望991点
  • 贡献值0点
  • 好评度239点
  • 原创分0分
  • 专家分0分
阅读:3454回复:14

为何清理缓存成功,检测却发现文件还在缓存状态?

楼主#
更多 发布于:2007-09-12 12:52
在CleanUp里面,CcFlushCache,然后判断需要清理就CcPurgeCacheSection,得到返回True清理成功

但是再用CCFileIsCache检查却发现文件还在缓存状态,这是为何?
提问归提问,还是只能靠自己
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
沙发#
发布于:2007-09-12 23:37
Did you set the last parameter UninitializeCacheMaps of CcPurgeCacheSection() to TRUE?
looksail
荣誉会员
荣誉会员
  • 注册日期2005-05-22
  • 最后登录2014-03-15
  • 粉丝2
  • 关注0
  • 积分1016分
  • 威望991点
  • 贡献值0点
  • 好评度239点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-09-12 23:50
最后一个参数设置FALSE和TRUE都试过,结果一样,谢谢michaelgz 常回答我的问题
提问归提问,还是只能靠自己
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
地板#
发布于:2007-09-13 00:00
CCFileIsCache macro checks SharedCacheMap field. Usually this field is only initialized back to NULL when CcUninitializeCacheMap() is called. Set Last parameter of CcPurgeCacheSection() to TRUE should perform this as well. Maybe you can try add an additional CcUninitializeCacheMap() call after CcPurgeCacheSection().

Anyway, this won't work for memory mapped file.

It's midnight. You are really a hardworking guy.
abc13271552
驱动小牛
驱动小牛
  • 注册日期2007-08-13
  • 最后登录2023-12-05
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望552点
  • 贡献值0点
  • 好评度160点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2007-09-13 08:53
在Create中clear去试 一下
驱网无线,快乐无限
abc13271552
驱动小牛
驱动小牛
  • 注册日期2007-08-13
  • 最后登录2023-12-05
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望552点
  • 贡献值0点
  • 好评度160点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2007-09-13 08:57
照我的个人理解,你有cleanup清cache不太合理,cleanup在清空irp栈时被调用,这个是不是会被调用,会不会出再延时,都会发生!这就造成了清空的不及时性。
当你点击一个小文件时,文件内容被cache了,这里的clear可能还没生效。

我认为应在create中处理, 我只clear 加密文件的cache 工作很好
驱网无线,快乐无限
wanghui219
禁止发言
禁止发言
  • 注册日期2007-08-28
  • 最后登录2019-07-29
  • 粉丝4
  • 关注3
  • 积分101166分
  • 威望505351点
  • 贡献值0点
  • 好评度137点
  • 原创分0分
  • 专家分4分
  • 社区居民
6楼#
发布于:2007-09-13 13:10
用户被禁言,该主题自动屏蔽!
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
7楼#
发布于:2007-09-13 22:40
I don't think to cleanup cache in CREATE is a good idea. No CLEANUP means there's still reference to the file and the cache is still in use.

Late CLEANUP/CLOSE happens to memory mapped files. VMM holds a reference to memory mapped files. And there's no way to tell when VMM release this reference. There's no legitimate way to cleanup memory mapped files from FSFD.
looksail
荣誉会员
荣誉会员
  • 注册日期2005-05-22
  • 最后登录2014-03-15
  • 粉丝2
  • 关注0
  • 积分1016分
  • 威望991点
  • 贡献值0点
  • 好评度239点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-09-14 10:47
尝试了很多方法都清理不掉,可以确认文件没有被任何程序占用,可能和michaelgz 说得一样,文件映射的清理不掉,那就傻眼了,怎么办呢
提问归提问,还是只能靠自己
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
9楼#
发布于:2007-09-15 12:54
引用第8楼looksail于2007-09-14 10:47发表的  :
尝试了很多方法都清理不掉,可以确认文件没有被任何程序占用,可能和michaelgz 说得一样,文件映射的清理不掉,那就傻眼了,怎么办呢

一定要用cache吗?对于加密文件可以不用cache,直接读写硬盘
looksail
荣誉会员
荣誉会员
  • 注册日期2005-05-22
  • 最后登录2014-03-15
  • 粉丝2
  • 关注0
  • 积分1016分
  • 威望991点
  • 贡献值0点
  • 好评度239点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-09-15 15:15
引用第9楼lsxredrain于2007-09-15 12:54发表的  :

一定要用cache吗?对于加密文件可以不用cache,直接读写硬盘

可想而知这样干效率有多么的低下,
提问归提问,还是只能靠自己
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
11楼#
发布于:2007-09-15 15:52
引用第10楼looksail于2007-09-15 15:15发表的  :

可想而知这样干效率有多么的低下,

这几个加密文件读写相对于整个系统文件的读写量来说是九牛一毛吧!
looksail
荣誉会员
荣誉会员
  • 注册日期2005-05-22
  • 最后登录2014-03-15
  • 粉丝2
  • 关注0
  • 积分1016分
  • 威望991点
  • 贡献值0点
  • 好评度239点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-09-15 17:10
引用第11楼lsxredrain于2007-09-15 15:52发表的  :

这几个加密文件读写相对于整个系统文件的读写量来说是九牛一毛吧!


不知道你到客户那里实施过加密吗?

去年当那个客户打开那个12000个的装配体时,我的心中只有祈祷,你快点吧

幸亏那个总工说慢点是必然的,当然那是应用层的加密

当打开12000个装配体时,大约会有36000个文件句柄存在,因为这个3D程序给每个文件生成1个临时文件,且还有个~$....的文件,就是12000*3,这还没有计算其他的文件呢,文件总大小超过800兆

如果是WORD,就1个文件,顶多同时打开几个,根本不算什么

如果都是OFFICE和ACAD这些个单文件的程序,我根本不用往驱动转

难啊,人都老了一大截,太累,总有一天会死在这上面的
提问归提问,还是只能靠自己
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
13楼#
发布于:2007-09-15 17:23
800M是没有碰见过,不过打开过一个几十M的文件,也是有几十个dwg组成的图,打开速度也很慢很慢,不过对比了一下,装加密和不装加密,所用的时间差不多.
如果是太复杂的文件,我觉得就不要清cache了,直接hook fastio
让密文读到cache中,在fastio中加密解密.
另外,我觉得如果处理临时文件的话,很容易死机的吧
根据Filebject来判断加密解密也不是很合适吧
Filebject->FsContext的数量会少很多很多,而且比较稳定
myfll
驱动牛犊
驱动牛犊
  • 注册日期2009-06-19
  • 最后登录2011-04-07
  • 粉丝0
  • 关注1
  • 积分30分
  • 威望291点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2009-07-12 14:24
怎样能禁掉Cache呢
游客

返回顶部