【问题标题】:Call to SetSystemFileCacheSize is failing in C++在 C++ 中调用 SetSystemFileCacheSize 失败
【发布时间】:2012-09-02 09:28:07
【问题描述】:

以下对 SetSystemFileCacheSize() 的调用失败,但如果将 "FILE_CACHE_MIN_HARD_ENABLE" 替换为 0,则会通过。

我做错了什么?

SIZE_T dwMinimumFileCacheSize = 1048576; // Exact number reported by SetSystemFileCacheSize.
SIZE_T dwMaximumFileCacheSize = 1099511627776; // Exact number reported by SetSystemFileCacheSize.

int result = SetSystemFileCacheSize(
    dwMinimumFileCacheSize, // dwMinimumWorkingSetSize
    dwMaximumFileCacheSize,  // dwMaximumWorkingSetSize,
    FILE_CACHE_MIN_HARD_ENABLE // Works if this flag is set to 0.
  );
if (result == 0)
{
  // Error is "5" if it fails.
  wprintf(L"  Error E2469: Could not set size of system cache, error %u.\n", GetLastError());
}
else
{
  wprintf(L"  Pass.\n");
}

【问题讨论】:

  • 您是否启用了 SE_INCREASE_QUOTA_NAME 权限?
  • @Alan Stokes 好主意,我会尽快尝试。
  • 错误 5 = ERROR_ACCESS_DENIED 应该建议您缺少权限。
  • 我已经发布了一个完整的powershell script,它同时执行 GetSystemFileCacheSize 和 SetSystemFileCacheSize 函数。如果您想比较它们,它会为实际的内核 API 调用运行一些与 C++ 非常相似的 C# 代码。

标签: c++ visual-studio-2010 mfc msdn


【解决方案1】:

事实证明,如果启用了 FILE_CACHE_MIN_HARD_ENABLE,dwMinimumFileCacheSize 必须比 dwMaximumFileCacheSize 小 64KB。

这里是修复:

int result = SetSystemFileCacheSize(
    dwMinimumFileCacheSize - 64 * 1024, // dwMinimumWorkingSetSize
    dwMaximumFileCacheSize,  // dwMaximumWorkingSetSize,
    FILE_CACHE_MIN_HARD_ENABLE // Works if this flag is set to 0.
  );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多