2017-12-09 10 views
4

私はC#プログラムを作成していますが、私が達成しなければならない要件の1つは、設定ファイルの値を決定するために、これはXYの問題ではなく、この情報は必須です。インストールされているシステムメモリの合計 - クロスプラットフォームソリューション

このクロスプラットフォームを作成する前に、Microsoft.VisualBasic.Devices名前空間でComputerInfoクラスを使用できましたが、これは.NET Coreでは使用できませんので、Windows以外のプラットフォームでは使用できません。 System.Diagnostics.Processクラスは、現在のプロセスで使用可能なメモリに関する情報を提供しますが、マシン上で使用可能な物理RAMの合計は含まれません。

これにはプラットフォーム間で照会する方法がありますか、ユーザーがこの情報を手動で入力する必要がありますか?

答えて

2

.NET Coreはクロスプラットフォームのフレームワークなので、開発者はさまざまなハードウェア製品やさまざまなオペレーティングシステムからハードウェア情報を収集できる堅牢なシステムを実装する方法をまだ考えていると考えられます。 https://github.com/dotnet/corefx/issues/22660

私はあなたがトリッキーな(そしておそらく不採算)の回避策を介してこれを達成するために持っていることを考える:

あなたがこのタスクを達成しようとする最初の人ではないようです。あなたが探している情報を提供できるOS固有のコマンド(現在のアプリケーション環境に基づいて)を実行するために、Process.StartSystem.Diagnosticsライブラリから)を使用してください。あなたは(あなたがあなたの出力を持つようにしたい形式に応じて)次のいずれかのコマンドを使用することができLinuxのために例えば

、:

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

ためMacOS次のいずれかのコマンド:

hwprefs memory_size 
system_profiler SPHardwareDataType | grep " Memory:" 

など...

私はそれが悪いことは知っていますが、ユーザーに手動で値を入力させるよりも優れていると思いますe。

+0

コマンドをありがとう!私はそれが私のユースケースのために働くと思う。プラットフォームに基づいて正しいコマンドを抽象化することは非常に難しいことではありません。うまくいけば、マイクロソフトはプラットフォーム依存のネイティブ呼び出しを実装し、この情報を取得するための標準APIを作成しますが、今のところこれが機能します。 – briman0094

関連する問題