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.