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

时间:2017-12-09 23:20:14

标签: c# .net .net-core

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

在我创建这个跨平台之前,我可以使用ComputerInfo命名空间中的Microsoft.VisualBasic.Devices类,但这在.NET Core中不可用,因此我无法在非Windows上使用它平台。 System.Diagnostics.Process类提供有关当前进程可用内存的信息,但这不包括计算机上可用的总物理RAM。

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

1 个答案:

答案 0 :(得分: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

MacOS以下命令之一:

hwprefs memory_size
system_profiler SPHardwareDataType | grep "  Memory:"

依旧......

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