Başka bir işlemin belleğini C# ile izlemeye çalışıyorum. Ancak, Process.WorkingSet64 veya Process.PrivateMemorySize64'ün çıkacağı maksimum bellek değeri 4294967295'dir. Ayrıca Performans Sayaçları ile aynı sorunu yaşıyorum.Process.WorkingSet64, maksimum değeri 4294967295 döndürür
using System;
using System.Diagnostics;
namespace perfmon
{
class Program
{
static void Main(string[] args)
{
int pid;
if (int.TryParse(args[0], out pid))
{
var p = Process.GetProcessById(pid);
var ramCounter = new PerformanceCounter("Process", "Working Set", p.ProcessName);
Console.WriteLine($"ProcessName:{p.ProcessName}");
var ram = ramCounter.NextValue();
p.Refresh();
Console.WriteLine("WorkingSet64\tPrivateMemorySize64\tRam PC");
Console.WriteLine($"{p.WorkingSet64}\t{p.PrivateMemorySize64}\t\t{ram}");
}
}
}
}
.net 4.61 ile, Windows Server 2012 R2 Running:
İşte benim kod.
Çıktı:
C:\XXX\perfmon>perfmon.exe 15800
ProcessName:XXX.Windows.Services
WorkingSet64 PrivateMemorySize64 Ram PC
4294967295 4294967295 4.294967E+09
süreci için
Powershell çıkışı: işlemi için
PS C:\Users\xxx> get-process -id 15800 | select-object -property workingSet64
WorkingSet64
------------
5079859200
Tasklist çıkışı: Gördüğünüz gibi
C:\Users\xxx>tasklist /FI "PID eq 15800"
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
XXX.Windows.Services 15800 Services 0 5,031,424 K
, C# süreci Ancak 4294967295 durur powershell veya görev listesini kullanarak 4 GB'ın üzerindeki belleği ölçmeye devam ediyor.
Bu, kodumda bir sorun mu var veya C# /. Net ile bellek ölçümünde bilinen bir sorun mu?
Aslında emin olmak için x64 olarak geliştirdim. Bu sorun gibi görünüyor. –