vinodh muthusamy Ответов: 1

Как рассчитать процент для оперативной памяти(memoryusage)


У меня есть 2 запроса.
Я создал работу с мониторингом процессора, я получил значение для использования процессора, использования оперативной памяти(памяти), были как использование процессора было рассчитано в процентах.

1. Мне нужно использование памяти в процентах. Я пытался, но не смог дотянуться.

2.Когда я размещаю это приложение в службе Windows, Как я могу определить, какая машина использует потребление.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    static List<float> AvailableCPU = new List<float>();
    static List<float> AvailableRAM = new List<float>();
    protected static PerformanceCounter cpuCounter;
    protected static PerformanceCounter ramCounter;
    private void Form1_Load(object sender, EventArgs e)
    {
        cpumonitor("CL35");
    }
    public void cpumonitor(string machinename)
    {
        cpuCounter = new PerformanceCounter();
        cpuCounter.CategoryName = "Processor";
        cpuCounter.CounterName = "% Processor Time";
        cpuCounter.InstanceName = "_Total";
        //string machinename = System.Environment.GetEnvironmentVariable("COMPUTERNAME");
        cpuCounter.MachineName = machinename;
        ramCounter = new PerformanceCounter("Memory", "Available MBytes");
        try
        {
            System.Timers.Timer t = new System.Timers.Timer(5000);
            t.Elapsed += new ElapsedEventHandler(TimerElapsed);
            t.Start();
            Thread.Sleep(10000);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "catched exception");
        }
    }
    public static void TimerElapsed(object source, ElapsedEventArgs e)
    {
        float cpu = cpuCounter.NextValue();
        float ram = ramCounter.NextValue();
        MessageBox.Show(string.Format("CPU Value: {0}, ram value: {1}", cpu, ram));
        AvailableCPU.Add(cpu);
        AvailableRAM.Add(ram);
    }
}


Что я уже пробовал:

Я пытался получить полное использование памяти.

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        static List<float> AvailableCPU = new List<float>();
        static List<float> AvailableRAM = new List<float>();
        protected static PerformanceCounter cpuCounter;
        protected static PerformanceCounter ramCounter;
        protected static PerformanceCounter ramTotMB;
        private void Form1_Load(object sender, EventArgs e)
        {
            cpumonitor("CL35");
        }
        public void cpumonitor(string machinename)
        {
            cpuCounter = new PerformanceCounter();
            cpuCounter.CategoryName = "Processor";
            cpuCounter.CounterName = "% Processor Time";
            cpuCounter.InstanceName = "_Total";
            //string machinename =           System.Environment.GetEnvironmentVariable("COMPUTERNAME");
            cpuCounter.MachineName = machinename;
            ramCounter = new PerformanceCounter("Memory", "Available MBytes");
            ramTotMB = new PerformanceCounter("Memory", "Total MBytes");
            try
            {
                System.Timers.Timer t = new System.Timers.Timer(5000);
                t.Elapsed += new ElapsedEventHandler(TimerElapsed);
                t.Start();
                Thread.Sleep(10000);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "catched exception");
            }
        }
        public static void TimerElapsed(object source, ElapsedEventArgs e)
        {
            float cpu = cpuCounter.NextValue();
            float ram = ramCounter.NextValue();
            float Totram = ramTotMB.NextValue();
            MessageBox.Show(string.Format("CPU Value: {0}, ram value: {1},Totalvalue: {2}", cpu, ram,Totram));
            AvailableCPU.Add(cpu);
            AvailableRAM.Add(ram);
        }
    }

Maciej Los

А что не так с вашим кодом?

vinodh muthusamy

мне нужно узнать, сколько памяти используется в процентах.

Jochen Arndt

usedMem = totalMem-availMem;
percentageMemUsage = 100 * usedMem / totalMem;

vinodh muthusamy

Совершенно верно. Но я попытался получить полную память указанной машины. Я не мог получить ценность.

Jochen Arndt

Смотрите мое решение.

1 Ответов

Рейтинг:
2

Jochen Arndt

Попробуй

ramTotMB = new PerformanceCounter("Memory", "Total Bytes");

Здесь нет counterName Свойство "всего Мбайт" (см. объект памяти[^] ).

Вы также можете поискать в интернете другие методы получения физической памяти, используя что-то вроде "C# total physical memory".


vinodh muthusamy

Я уже пробовал . Он выдает ошибку как

Не удалось найти счетчик производительности с указанным именем категории "память", именем счетчика "общее количество байт".

Jochen Arndt

Вот почему я предложил использовать другой метод.
Общая память на самом деле не связана с мониторингом производительности, а является системным свойством.

Member 14569571

я хочу получить использование оперативной памяти в процентах