总安装系统内存 - 跨平台解决方案

Arc*_*nox 6 .net c# .net-core

我正在编写一个C#程序,我必须满足的一个要求是确定用于确定配置文件值的总安装系统内存.这不是XY问题,此信息是强制性的.

在我创建这个跨平台之前,我可以ComputerInfoMicrosoft.VisualBasic.Devices命名空间中使用该类,但这在.NET Core中不可用,因此我无法在非Windows平台上使用它.的System.Diagnostics.Process类提供关于可用于当前过程中的存储器中的信息,但是这并不包括在机器上可用的总的物理RAM.

是否存在跨平台查询方式,或者我是否必须让用户手动输入此信息?

Tom*_*zzo 4

由于.NET Core它是一个跨平台框架,我怀疑开发人员仍在研究如何实现一个能够从不同操作系统和各种硬件产品收集硬件信息的可靠系统。

看来您不是第一个尝试完成此任务的人: https://github.com/dotnet/corefx/issues/22660

我认为您必须通过一种棘手的(并且可能表现不佳)解决方法来实现这一目标。我建议您采用一种方法:使用Process.Start(来自System.Diagnostics库)来执行特定于操作系统的命令(基于当前的应用程序环境),这些命令能够提供您正在查找的信息。

例如,Linux您可以使用以下命令之一(取决于您希望输出的格式):

dmidecode -t 17 | grep  Size:
awk '/MemTotal/ {print $2}' /proc/meminfo
Run Code Online (Sandbox Code Playgroud)

对于MacOS以下命令之一:

hwprefs memory_size
system_profiler SPHardwareDataType | grep "  Memory:"
Run Code Online (Sandbox Code Playgroud)

等等...

我知道这很糟糕,但我认为这仍然比强迫用户手动输入值要好。