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

标签 c# .net .net-core

我正在编写一个 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 库)来执行特定于操作系统的命令(基于当前的应用程序环境),这些命令能够提供您正在寻找的信息。

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

dmidecode -t 17 | grep  Size:
awk '/MemTotal/ {print $2}' /proc/meminfo

对于 MacOS 以下命令之一:

hwprefs memory_size
system_profiler SPHardwareDataType | grep "  Memory:"

等等……

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

关于c# - 总安装系统内存 - 跨平台解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47734260/

相关文章:

c# - 如何为.NET Core项目指定程序集版本?

.net-core - 使用 Visual Studio 2017 将 .NET Core 应用程序编译为 EXE 文件

c# - 将 BindingList<T> 转换为 T 数组

c# - MemoryCache绝对过期和内存限制

c# - "An error occurred creating the configuration section handler for"-

.net - 无法调用 Dispose?

.net - 在集成测试中消息未发送到 Azure 服务总线

C#、WCF 和 DateTime.MinValue() 与空日期

c# - DeleteSubKey UnauthorizedAccessException

unit-testing - VSTS : dotnet with Docker fail to publish tests