我正在编写一个C#程序,我必须满足的一个要求是确定用于确定配置文件值的已安装系统总内存。这不是XY问题,此信息是强制性的。
在我创建这个跨平台之前,我可以在ComputerInfo
命名空间中使用Microsoft.VisualBasic.Devices
类,但这在.NET Core中不可用,因此我无法在非Windows平台上使用它。 System.Diagnostics.Process
类提供有关当前进程可用内存的信息,但这不包括计算机上可用的总物理RAM。
是否存在跨平台查询方式,或者我是否必须让用户手动输入此信息?
由于.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
对于MacOS
,以下命令之一:
hwprefs memory_size
system_profiler SPHardwareDataType | grep " Memory:"
等等...
我知道这很糟糕,但我认为它仍然比强迫用户手动输入值更好。