Bagaimana saya bisa mendapatkan RAM atau memori yang tersedia yang digunakan oleh aplikasi?
c#
memory-management
johnnyRose
sumber
sumber
System.Diagnostics.Process
kelasnya.Jawaban:
Kamu bisa memakai:
Untuk mendapatkan proses dan penggunaan saat ini:
Untuk mendapatkan penggunaan memori pribadi. Untuk informasi lebih lanjut, lihat tautan ini .
sumber
GetCurrentProcess
, tetapi hanya perlu di-refresh jika Anda melakukan operasi lain sebelum mengakses properti. Sumber - Komentar mengatakan properti sudah benar pada saat snapshot proses dibuat.Anda mungkin ingin memeriksa metode GC.GetTotalMemory .
Ini mengambil jumlah byte yang saat ini dianggap dialokasikan oleh pengumpul sampah.
sumber
System.Environment memiliki WorkingSet - bilangan bulat 64-bit yang berisi jumlah byte memori fisik yang dipetakan ke konteks proses.
Jika Anda menginginkan banyak detail, ada System.Diagnostics.PerformanceCounter , tetapi penyiapannya akan sedikit lebih sulit.
sumber
Lihat di sini untuk detailnya.
private PerformanceCounter cpuCounter; private PerformanceCounter ramCounter; public Form1() { InitializeComponent(); InitialiseCPUCounter(); InitializeRAMCounter(); updateTimer.Start(); } private void updateTimer_Tick(object sender, EventArgs e) { this.textBox1.Text = "CPU Usage: " + Convert.ToInt32(cpuCounter.NextValue()).ToString() + "%"; this.textBox2.Text = Convert.ToInt32(ramCounter.NextValue()).ToString()+"Mb"; } private void Form1_Load(object sender, EventArgs e) { } private void InitialiseCPUCounter() { cpuCounter = new PerformanceCounter( "Processor", "% Processor Time", "_Total", true ); } private void InitializeRAMCounter() { ramCounter = new PerformanceCounter("Memory", "Available MBytes", true); }
Jika Anda mendapatkan nilai 0 itu perlu memanggil
NextValue()
dua kali. Kemudian memberikan nilai sebenarnya dari penggunaan CPU. Lihat detail selengkapnya di sini .sumber
Selain @JesperFyhrKnudsen 's jawaban dan @MathiasLykkegaardLorenzen komentar' s, Anda sebaiknya
dispose
dikembalikanProcess
setelah menggunakannya.Jadi, Untuk membuang
Process
, Anda dapat membungkusnya dalam sebuahusing
lingkup atau memanggilDispose
proses yang dikembalikan (proc
variabel).using
cakupan:var memory = 0.0; using (Process proc = Process.GetCurrentProcess()) { // The proc.PrivateMemorySize64 will returns the private memory usage in byte. // Would like to Convert it to Megabyte? divide it by 2^20 memory = proc.PrivateMemorySize64 / (1024*1024); }
Atau
Dispose
metode:var memory = 0.0; Process proc = Process.GetCurrentProcess(); memory = Math.Round(proc.PrivateMemorySize64 / (1024*1024), 2); proc.Dispose();
Sekarang Anda bisa menggunakan
memory
variabel yang diubah menjadi Megabyte.sumber
^
adalah XOR bitwise, bukan daya. Jadi gunakan sajaproc.PrivateMemorySize64 / (1024*1024)
, atauproc.PrivateMemorySize64 / (1 << 20)
proc.PrivateMemorySize64 / (1024 * 1024)
karena perkalian tidak memiliki prioritas di atas pembagian.Untuk sistem lengkap Anda dapat menambahkan Kerangka Microsoft.VisualBasic sebagai referensi;
Console.WriteLine("You have {0} bytes of RAM", new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory); Console.ReadLine();
sumber