C# - 如何判断系统是否有虚拟内存/页面文件?

Mga*_*erz 6 c# wmi virtual-memory

我有一个应用程序,它消耗了我部署给用户的大量 RAM。我的一些用户在运行它时遇到内存不足的异常 - 我注意到这是因为他们关闭了他们的系统页面文件(因为现在谁会使用 16GB 的内存?叹息......)。我想检测用户是否已将其设置为关闭(或者可能是其他一些设置),以便我可以警告他们,因为我们有很多用户来找我们寻求支持,我想自动化一些用户,因为他们正在吃饭占用了我们很多时间。

我在谷歌上搜索,似乎找不到获取有关页面文件信息的方法。具体来说,我说的是您可以在此页面中在 windows 中看到的信息: windows中的页面文件设置

我知道这是我们的最终用户问题,与我们的应用程序无关(我们的应用程序旨在占用大量内存并获得显着的速度优势)。我不确定如何检测这些类型的设置 - 有没有人知道?

Mar*_*een 6

您需要事先添加对 System.Management 的引用。

AllocatedBaseSize将显示当前页面文件大小(以 MB 为单位)

using (var query = new ManagementObjectSearcher("SELECT AllocatedBaseSize FROM Win32_PageFileUsage"))
        {
            foreach (ManagementBaseObject obj in query.Get())
            {
                uint used = (uint)obj.GetPropertyValue("AllocatedBaseSize");
                Console.WriteLine(used);
            }
        }
Run Code Online (Sandbox Code Playgroud)

虽然MaximumSize会以 MB 为单位显示最大页面文件大小,但如果用户设置了最大大小(如果系统管理它,查询将不会返回任何内容)。

using (var query = new ManagementObjectSearcher("SELECT MaximumSize FROM Win32_PageFileSetting"))
        {
            foreach (ManagementBaseObject obj in query.Get())
            {
                uint max = (uint)obj.GetPropertyValue("MaximumSize");
                Console.WriteLine(max);
            }
        }
Run Code Online (Sandbox Code Playgroud)

如果 AllocatedBaseSize 小于您的应用程序将使用的大小,并且 MaximumSize 对您的应用程序(或由系统管理)来说足够大,则您需要考虑存储空间不足以让 Windows 增长页面文件的边缘情况。即使一开始有足够的空间,用户也可能在运行您的应用程序时在其他程序上下载大文件或渲染大视频。考虑提供“低存储”模式,在这种模式下,您的应用可能运行速度较慢,但​​不会消耗太多内存。