CacheSet是一个小程序,允许您处理系统文件缓存中的工作集参数。与CacheMan不同,CacheSet 可以在所有版本的 NT 上运行,而且在不对新 Service Pack 版本进行修改的情况下也可运行。除了使您能够控制工作集大小的最小值和最大值,它还允许您重置缓存的工作集,强制它在必要时从一个最小的起点开始增长。仍然与 CacheMan 不同的是,对 CacheSet 的更改会对缓存的大小立即产生影响。
使用 CacheSet 对系统缓存的大小进行性能优化的方式,在用 CacheMan 时如果不调整内部变量就无法做到。
注意:要在 NT 4.0 Service Pack 4 上使用 CacheSet,您必须拥有“增加配额”的权限(管理员账户默认拥有此权限)。 CacheSet 已经获得更新可启用此权限,因此它可以在 SP4 上运行。
安装和使用
CacheSet 可以在已发布的所有 NT 版本上运行。启动后,它显示系统文件缓存的当前大小(每秒更新两次)、最大值(上一次重新启动后的最大值),并允许您设置新工作集大小的最小值和最大值。
设置新的大小
输入新的最小值和最大值,单击“Apply”(应用)按钮即可。如果出现错误,那么应是以下情况之一:您输入的最大值小于最小值,或您输入的最小值小于系统工作集大小的最小值,或者您输入的最大值大于系统工作集大小的最大值。请调整您输入的值,然后再试一次。
您可能注意到缓存的大小立即发生变化,然后迅速缩小或增大。这是因为系统每秒自动修剪工作集一次。释放出来的缓存页仍在内存中,但可以迅速被放弃,由其他需要更多内存的程序使用。类似地,当应用程序访问文件系统数据时,缓存可以很容易重新获得页。
重置以前的值
任何时候,只需单击“重置”(Reset) 按钮,您即可恢复最后一次启动 CacheSet 时缓存的工作集的活动值。
清除缓存的工作集
按下“清除”(Clear) 按钮即可强制缓存释放它的所有页。请注意,缓存在需要时可以重新增大,这与刷新缓存不同 - 分配给它的页面将可以由其他程序使用,并可以被缓存回收。
使用命令行界面
您可以在 CacheSet 的命令行上输入工作集大小的最小值和最大值。CacheSet 将自行应用这些新的值。这样,您可以将 CacheSet 添加到“开始”(Start) 程序组以便在每次启动时自动设置缓存的大小。
用法:CacheSet [工作集最小值] [工作集最大值]
工作原理
CacheSet 使用一个 NtQuerySystemInformation 调用来获取关于缓存设置的信息以及 NtSetSystemInformation 以设置新的大小调整信息。进程的工作集信息为 NT 的内存管理器提供指导原则,说明多少页的物理内存应该分配给应用程序。由于这些是指导原则,因此可能出现这样的情况,即内存管理器将某工作集的大小增大到 超过最大值,或将其缩小到小于最小值。但是,设置是将会影响整体分配的因素,也因此会影响到应用程序的响应性。对于 CacheSet 而言,应用程序就是文件系统缓存。
NtSetSystemInformation 在内部调用 MmAdjustWorkingSetSize,后者会增大应用程序的工作集或对其进行修剪。如果传递给 MmAdjustWorkingSetSize 的第三个参数是 1,系统缓存的工作集将得到调整,否则调整将发生在当前过程上(系统信息调用只影响系统缓存)。将 -1 作为最小值和最大值传递将导致 MmAjustWorkingSetSize 执行工作集清除操作,释放应用程序工作集中的所有页面。