我正在编写一个C#程序,我必须满足的要求之一是确定用于确定配置文件值的总安装系统内存。这不是XY问题,此信息是强制性的。
在制作此跨平台之前,我可以在Microsoft.VisualBasic.Devices
名称空间中使用ComputerInfo
类,但这在.NET Core中不可用,因此我无法在非Windows平台上使用它。System.Diagnostics.Process
类提供有关当前过程可用内存的信息,但这不包括机器上可用的总体RAM。
是否有跨平台查询此问题的方法,或者我必须手动输入此信息?
由于 .NET Core
是一个跨平台框架,我怀疑开发人员仍在弄清楚如何实现能够从不同操作系统和各种硬件收集硬件信息的固体系统产品。
看来您不是第一个试图完成此任务的人:https://github.com/dotnet/corefx/issues/22660
我认为您必须通过一个棘手的(而且表现不佳)解决方法来实现这一目标。我建议您一个:使用Process.Start
(来自System.Diagnostics
库),以执行能够提供您要寻找的信息的OS特定命令(基于当前的应用程序环境)。
例如,对于Linux
,您可以使用以下命令之一(取决于要输出的格式):
dmidecode -t 17 | grep Size:
awk '/MemTotal/ {print $2}' /proc/meminfo
对于MacOS
,以下命令之一:
hwprefs memory_size
system_profiler SPHardwareDataType | grep " Memory:"
等等...
我知道这很糟糕,但是我认为它比强迫用户手动输入值更好。