C # 'da kullanılabilir bellek nasıl kullanılır veya kullanılır


Yanıtlar:


172

Kullanabilirsiniz:

Process proc = Process.GetCurrentProcess();

Geçerli işlemi almak ve kullanmak için:

proc.PrivateMemorySize64;

Özel bellek kullanımı elde etmek için. Daha fazla bilgi için bu bağlantıya bakın .


52
Muhtemelen GetCurrentProcess'e yapılan bir çağrının kendisinin oldukça fazla kaynak ayıracağı belirtilmelidir. Çağrı Bittiğinde geri gönderilen işlemi imha edin veya tüm kodu "kullanma" kapsamına alın.
— Mathias Lykkegaard Lorenzen

9
Ad alanı: System.Diagnostics Assembly: System (in System.dll)
— Enigma Plus

12
Ayrıca RefM () çağrılıncaya kadar PrivateMemorySize64 özelliğinin (+ diğer özellikler) kendisinin otomatik olarak güncellenmediğini eklemek istiyorum. (Yukarıdaki bağlantıdan sayfada bahsedilmiştir.)
— ScottRhee

1
Daha fazla yanıt için bu benzer soruya bakın: stackoverflow.com/questions/14032515/…
— Aaron D

1
@ScottRhee yanılıyorsam beni düzelt - ama ben özellik değerleri aradığınız anda "güncel" olduğunu eklemek istiyorum GetCurrentProcess, ama sadece özellikleri erişmeden önce başka işlemler yapıyorsanız yenilenmesi gerekir. Kaynak - Açıklamalar , işlem anlık görüntüsü oluşturulduğu anda özelliklerin doğru olduğunu söylüyor.
— tabjsina

38

GC.GetTotalMemory yöntemini kontrol etmek isteyebilirsiniz .

Çöp toplayıcı tarafından tahsis edildiği düşünülen bayt sayısını alır.


12
Sadece yönetilen yığınlar olsa. Arkain'in cevabı hem yerli hem de yönetilen yığınlar vermelidir.
— Yaur


11

Bakın burada detaylar için.

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);

}

0 olarak değer alırsanız, NextValue()iki kez çağırmanız gerekir . Daha sonra CPU kullanımının gerçek değerini verir. Daha fazla ayrıntıyı burada görebilirsiniz .


6

Ek olarak @JesperFyhrKnudsen 'ın cevabı ve @MathiasLykkegaardLorenzen un yorumunu size daha iyi olurdu disposedöndü Processkullandıktan sonra.

Yani, imha etmek için Process, onu bir usingkapsamda sarabilir veya Disposedöndürülen işlemi ( procdeğişken) çağırabilirsiniz.

  1. using dürbün:

    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);
    }
  2. Veya Disposeyöntem:

    var memory = 0.0;
    Process proc = Process.GetCurrentProcess();
    memory = Math.Round(proc.PrivateMemorySize64 / (1024*1024), 2);
    proc.Dispose();

Şimdi memoryMegabayta dönüştürülen değişkeni kullanabilirsiniz .


3
Not: Bir megabayt 2 ^ 20 değil 1e + 6
— Hylaean

1
Bir not. C # ' ^da bit değil XOR, güç değil. Yani sadece kullanın proc.PrivateMemorySize64 / (1024*1024)veyaproc.PrivateMemorySize64 / (1 << 20)
— Сергей Рыбаков

Parantezleri kaçırdınız, proc.PrivateMemorySize64 / (1024 * 1024)çarpma işleminin bölme önceliğine sahip olmaması gerekir.
— Laurynas Lazauskas

@LaurynasLazauskas Cevabı güncelledim. Teşekkürler.
— Ahmad Payan

0

Tüm sistem için Microsoft.VisualBasic Framework'ü başvuru olarak ekleyebilirsiniz;

 Console.WriteLine("You have {0} bytes of RAM",
        new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory);
        Console.ReadLine();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.