Как использовать счетчик производительности без использования таймера в форме c #? Я получаю сообщение об ошибке типа Название категории не найдено - PullRequest
0 голосов
/ 18 февраля 2020

При написании программы конвертации видео в форме c # я измеряю скорость конвертации с помощью индикатора выполнения. Я на самом деле измеряю, используя определенные методы, но я хочу дать пользователю, сколько ЦП он использует с фактическими значениями, то есть скорость процесса.

if (comboBox1.Text == "mp3")
                {
                  var convert = new NReco.VideoConverter.FFMpegConverter();
                    convert.ConvertMedia(VideoPath, MusicPath, "mp3");
                    progressBar1.Value = (int)(performanceCounter1.NextValue());
                    label7.Text = "Processor Time: " + progressBar1.Value.ToString() + "%";
                    /*   progressBar1.Value = 80;
                        label7.Text = "% 80";*/
                    MessageBox.Show("converst is okey");
                    progressBar1.Value = (int)(performanceCounter1.NextValue());
                    label7.Text = "Processor Time: " + progressBar1.Value.ToString() + "%";

Я сделал это с кодом I нашел из ин tnet, но у меня не получается. ro Как мне исправить?

На этих фотографиях

enter image description here

1 Ответ

1 голос
/ 22 февраля 2020

Сначала мы инициализируем соответствующие счетчики ЦП, которые вы хотите захватить, а на ButtonClick мы начинаем читать счетчик производительности и увеличивать индикатор выполнения. Приращения forl oop и прогрессбар могут быть неуместны в вашем случае, но я добавил их, чтобы продемонстрировать весь сценарий

Согласно вашему разъяснению в разделе комментариев, это обновит текстовое поле с информацией в реальном времени от performanceCounters

public PerformanceCounter privateBytes;
public PerformanceCounter gen2Collections;
public Form1()
{

    InitializeComponent();

    var currentProcess = Process.GetCurrentProcess().ProcessName;
    privateBytes =  new PerformanceCounter(categoryName: "Process", counterName: "Private Bytes", instanceName: currentProcess);
    gen2Collections = new PerformanceCounter(categoryName: ".NET CLR Memory", counterName: "# Gen 2 Collections", instanceName: currentProcess);

}
async Task LongRunningProcess()
{

    await Task.Delay(500);

}
private async void button1_Click(object sender, EventArgs e)
{

    for (int i = 0; i <100; i++)
    {
        progressBar1.Value = i;
        textBox1.Text = "privateBytes:" + privateBytes.NextValue().ToString() + " gen2Collections:" + gen2Collections.NextValue().ToString() ;
        await Task.Run(() => LongRunningProcess());
    }

}


Примечание: также проверьте ответ Ханса Пассанта на ISupportInitialize

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