阅读:3892回复:14
为何清理缓存成功,检测却发现文件还在缓存状态?
在CleanUp里面,CcFlushCache,然后判断需要清理就CcPurgeCacheSection,得到返回True清理成功
但是再用CCFileIsCache检查却发现文件还在缓存状态,这是为何? |
|
|
沙发#
发布于:2009-07-12 14:24
怎样能禁掉Cache呢
|
|
板凳#
发布于:2007-09-15 17:23
800M是没有碰见过,不过打开过一个几十M的文件,也是有几十个dwg组成的图,打开速度也很慢很慢,不过对比了一下,装加密和不装加密,所用的时间差不多.
如果是太复杂的文件,我觉得就不要清cache了,直接hook fastio 让密文读到cache中,在fastio中加密解密. 另外,我觉得如果处理临时文件的话,很容易死机的吧 根据Filebject来判断加密解密也不是很合适吧 Filebject->FsContext的数量会少很多很多,而且比较稳定 |
|
地板#
发布于:2007-09-15 17:10
引用第11楼lsxredrain于2007-09-15 15:52发表的 : 不知道你到客户那里实施过加密吗? 去年当那个客户打开那个12000个的装配体时,我的心中只有祈祷,你快点吧 幸亏那个总工说慢点是必然的,当然那是应用层的加密 当打开12000个装配体时,大约会有36000个文件句柄存在,因为这个3D程序给每个文件生成1个临时文件,且还有个~$....的文件,就是12000*3,这还没有计算其他的文件呢,文件总大小超过800兆 如果是WORD,就1个文件,顶多同时打开几个,根本不算什么 如果都是OFFICE和ACAD这些个单文件的程序,我根本不用往驱动转 难啊,人都老了一大截,太累,总有一天会死在这上面的 |
|
|
地下室#
发布于:2007-09-15 15:52
引用第10楼looksail于2007-09-15 15:15发表的 : 这几个加密文件读写相对于整个系统文件的读写量来说是九牛一毛吧! |
|
5楼#
发布于:2007-09-15 15:15
引用第9楼lsxredrain于2007-09-15 12:54发表的 : 可想而知这样干效率有多么的低下, ![]() |
|
|
6楼#
发布于:2007-09-15 12:54
引用第8楼looksail于2007-09-14 10:47发表的 : 一定要用cache吗?对于加密文件可以不用cache,直接读写硬盘 |
|
7楼#
发布于:2007-09-14 10:47
尝试了很多方法都清理不掉,可以确认文件没有被任何程序占用,可能和michaelgz 说得一样,文件映射的清理不掉,那就傻眼了,怎么办呢
|
|
|
8楼#
发布于: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. |
|
禁止发言
![]() |
9楼#
发布于:2007-09-13 13:10
用户被禁言,该主题自动屏蔽! |
10楼#
发布于:2007-09-13 08:57
照我的个人理解,你有cleanup清cache不太合理,cleanup在清空irp栈时被调用,这个是不是会被调用,会不会出再延时,都会发生!这就造成了清空的不及时性。
当你点击一个小文件时,文件内容被cache了,这里的clear可能还没生效。 我认为应在create中处理, 我只clear 加密文件的cache 工作很好 |
|
|
11楼#
发布于:2007-09-13 08:53
在Create中clear去试 一下
|
|
|
12楼#
发布于: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. |
|
13楼#
发布于:2007-09-12 23:50
最后一个参数设置FALSE和TRUE都试过,结果一样,谢谢michaelgz 常回答我的问题
|
|
|
14楼#
发布于:2007-09-12 23:37
Did you set the last parameter UninitializeCacheMaps of CcPurgeCacheSection() to TRUE?
|
|