日期:2014-05-17  浏览次数:20945 次

调用SetSystemFileCacheSize API失败的奇怪问题
我在程序中调用SetSystemFileCacheSize来设置系统文件缓存的大小,但却始终错误,代码如下:
public const ulong FILE_CACHE_MAX_HARD_ENABLE = 0x00000001;
    public const ulong FILE_CACHE_MAX_HARD_DISABLE = 0x00000002;
    public const ulong FILE_CACHE_MIN_HARD_ENABLE = 0x00000004;
    public const ulong FILE_CACHE_MIN_HARD_DISABLE = 0x00000008;

    [DllImport("Kernel32.dll", SetLastError = true)]
    public static extern bool GetSystemFileCacheSize(out ulong lpMinimumFileCacheSize
        , out ulong lpMaximumFileCacheSize
        , out ulong lpFlags);

    [DllImport("Kernel32.dll", SetLastError = true)]
    public static extern bool SetSystemFileCacheSize(ulong MinimumFileCacheSize, ulong MaximumFileCacheSize, ulong Flags);

这是声明部分,一个是GetSystemFileCacheSize函数,用来获取当前的配置,一个是SetSystemFileCacheSize函数用来设置新参数。
以下是调用:
ulong lpMinimumFileCacheSize = 1048576;
                ulong lpMaximumFileCacheSize = 1048576 * 1024;

                bool isok = SetSystemFileCacheSize(lpMinimumFileCacheSize, lpMaximumFileCacheSize, FILE_CACHE_MAX_HARD_ENABLE | FILE_CACHE_MIN_HARD_ENABLE);


调用的时候始终是返回false,而且参数也没有被修改,调用GetSystemFileCacheSize倒是可以正常获取当前设置。

------解决方案--------------------
引用 MSDN文档
Remarks
The calling process must enable the SE_INCREASE_QUOTA_NAME privilege.

详见http://msdn.microsoft.com/zh-cn/library/windows/desktop/aa965240%28v=vs.85%29.aspx