コードで使用可能なシステム メモリの量を測定したいと考えていC#
ます。私はそれが次のように行われると信じています:
PerformanceCounter ramCounter = new PerformanceCounter(
"Memory"
, "Available MBytes"
, true
);
float availbleRam = ramCounter.NextValue();
ものにはカテゴリがMono
ありません。"Memmory"
次のように、カテゴリのリストを繰り返し処理しました。
PerformanceCounterCategory[] cats = PerformanceCounterCategory.GetCategories();
string res = "";
foreach (PerformanceCounterCategory c in cats)
{
res += c.CategoryName + Environment.NewLine;
}
return res;
そして、私が見つけた最も近いカテゴリ"Mono Memory"
は、何もなく、呼び出しで"Available MBytes"
0を返し続けるものです。NextValue
モノが返すカテゴリの完全なリストは次のとおりです。
Processor
Process
Mono Memory
ASP.NET
.NET CLR JIT
.NET CLR Exceptions
.NET CLR Memory
.NET CLR Remoting
.NET CLR Loading
.NET CLR LocksAndThreads
.NET CLR Interop
.NET CLR Security
Mono Threadpool
Network Interface
C#
++で使用可能なメモリを測定する方法を知っている人はいますMono
かUbuntu
?
[アップデート]
私はこれを次のUbuntu
ように行うことができました(外部プログラムを使用free
):
long GetFreeMemorySize()
{
Regex ram_regex = new Regex(@"[^\s]+\s+\d+\s+(\d+)$");
ProcessStartInfo ram_psi = new ProcessStartInfo("free");
ram_psi.RedirectStandardOutput = true;
ram_psi.RedirectStandardError = true;
ram_psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
ram_psi.UseShellExecute = false;
System.Diagnostics.Process free = System.Diagnostics.Process.Start(ram_psi);
using (System.IO.StreamReader myOutput = free.StandardOutput)
{
string output = myOutput.ReadToEnd();
string[] lines = output.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
lines[2] = lines[2].Trim();
Match match = ram_regex.Match(lines[2]);
if (match.Success)
{
try
{
return Convert.ToInt64(match.Groups[1].Value);
}
catch (Exception)
{
return 0L;
}
}
else
{
return 0L;
}
}
}
しかし、このソリューションの問題はMono
、システム内で実行された場合にのみ機能することですLinux
。Mono
誰かが+の解決策を思い付くことができるかどうか知りたいWindows
ですか?