【问题标题】:Get the pagefile size of a drive获取驱动器的页面文件大小
【发布时间】:2013-10-18 01:37:03
【问题描述】:

如何找到驱动器的当前页面文件大小?

在windows 7之前,System32文件夹中曾经有一个名为pafefileconfig.vba的脚本可以使用。但它现在被删除了。

是否可以使用 JNA 获取详细信息?如果是,怎么做?

编辑

这是我编写的使用 JNA 获取页面文件信息的代码:

  Kernel32 kernel32 = (Kernel32)Native.loadLibrary("kernel32", Kernel32.class);
    MEMORYSTATUSEX memInfo = new MEMORYSTATUSEX();
    kernel32.GlobalMemoryStatusEx(memInfo);
    int toMB = (1024*1024);
    float RAM = memInfo.ullTotalPhys.floatValue();
    float totalPage = memInfo.ullTotalPageFile.floatValue();
    float availPage = memInfo.ullAvailPageFile.floatValue();
    float availRam = memInfo.ullAvailPhys.floatValue();

    System.out.println(memInfo.dwMemoryLoad);
    System.out.println("RAM "+RAM/toMB);
    System.out.println("RAM avail "+availRam/toMB);
    float ramUsed = RAM-availRam;
    System.out.println("RAM used "+ramUsed/toMB);
    System.out.println("Total page(RAM+Page) "+(totalPage)/toMB);
    float totalPageWithoutRam = totalPage-RAM;
    System.out.println("Total page(without RAM) "+(totalPageWithoutRam)/toMB);
    System.out.println("Total avail page(With free ram) "+availPage/toMB);
    float avialPageWithoutRam = availPage-availRam;
    System.out.println("Total page avail(Without ram) "+(avialPageWithoutRam)/toMB);
    System.out.println("Page used so far(Without ram) "+(totalPageWithoutRam-avialPageWithoutRam)/toMB);

这是输出:

82
RAM 12285.582
RAM avail 2167.6758
RAM used 10117.906
Total page(RAM+Page) 24569.348
Total page(without RAM) 12283.766
Total avail page(With free ram) 12115.641
Total page avail(Without ram) 9947.965
Page used so far(Without ram) 2335.8008

我在使用GetPerformanceInfo 时也得到了相同的结果。

但这看起来与我运行 wmic pagefile

时得到的不同
wmic:root\cli>pagefile list /format :list


AllocatedBaseSize=12285
CurrentUsage=843
Description=C:\pagefile.sys
InstallDate=20120329043502.876449+330
Name=C:\pagefile.sys
PeakUsage=843
Status=
TempPageFile=FALSE

为什么我看到了不同?

【问题讨论】:

  • 你有没有看过pagefileconfig.vba的来源以获得灵感?我猜(因为我没有副本)它会包含一组对可能与任务相关的库或可执行命令的调用,尽管我假设这些调用会更改为进入 Windows 7。

标签: java windows memory


【解决方案1】:

那么信息是通过WMI暴露出来的,你可以使用wmic命令行工具列出pagefile信息。

例如在我的桌面上:

C:\WINDOWS\system32>wmic pagefile list /format:list


AllocatedBaseSize=3840
CurrentUsage=213
Description=C:\pagefile.sys
InstallDate=20110616154020.168800+060
Name=C:\pagefile.sys
PeakUsage=231
Status=
TempPageFile=FALSE

您可以使用ProcessBuilder 等来集成它...

如前所述,这是公开Win32_PageFileUsage 结构,它以MB 为单位定义大小。

【讨论】:

  • 谢谢。我会试试这个。 :)
  • 是否分配了basesize、currentusage和peakusage,单位为MB?
  • 您实际上是在阅读 Win32_PageFileUsage 数据结构,它以 MB 为单位定义大小。
  • @sonic 有一个“小开销”与从 GlobalMemoryStatusEx() 返回的值相关联 - 它在 dwTotalPageSize 的 MEMORYSTATUS 元素中显式调用。这是意料之中的 - 总会有一些开销。
  • hmm.. 但我在这里看到了巨大的差异。大约 1.4GB。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多