我想测量我的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
?