[c#]таймер C#. как сократить потребление ресурсов ЦП

Есть некий код, в котором по таймеру запускается процесс cmd. В cmd передается команда "показать состояние размещённой сети" (netsh wlan show hostednetwork). Результат заносится в переменную log1 Затем через некоторую паузу Task.Delay вызывается цикл foreach поиска mac адреса через регулярное выражение

Regex.IsMatch(podstroka, "..:..:..:..:..:..")

вот часть кода

public async void GetClients()
    {
        RegistryKey RegKeysMac = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\MyFI\DB");

        await Task.Run(() =>
        {
            Process proc = Process.Start(new ProcessStartInfo
            {
                StandardOutputEncoding = Encoding.GetEncoding("CP866"),
                FileName = "PowerShell",
                Arguments = "& 'cmd' '/c chcp 866 & netsh wlan show hostednetwork'", //powershell используется здесь вместо cmd из-за проблем с кодировкой на win7 
                UseShellExecute = false,
                CreateNoWindow = true,
                RedirectStandardOutput = true

            });
            try
            {
                string[] log1 = proc.StandardOutput.ReadToEnd().ToString().Remove(0, 465).Split();
                foreach (string podstroka in log1)
                {
                    if (Regex.IsMatch(podstroka, "..:..:..:..:..:.."))
                    {
                        MAClist.Items.Add(podstroka);
                    }


                }
                foreach (string item in MAClist.Items) //Поиск присвоенных имен устройств по MAC в базе программы
                {
                    foreach (string Keyname in RegKeysMac.GetValueNames())
                    {

                        if (item.Contains(Keyname))
                        {
                            string value = RegKeysMac.GetValue(Keyname).ToString();
                            DeviceNameList.Items.Add(value);
                        }

                    }
                }
            }
            catch
            {
            }

        });

        ClientsNumber.Text = MAClist.Items.Count.ToString();

    }

Данный цикл повторяется примерно каждые 10 секунд (время задается пользователем). Вопрос в том, как сократить потребление ресурсов? Есть версия, чтобы запускать cmd или powershell только 1 раз и по очереди передовать команды, делать паузу, потом опять передать команду. Но не понятно, как сделать так, чтобы таймер передавал команды именно в нужный процесс.

cls
netsh wlan show drivers
Task.Delay(1000)

Может есть другой способ? Пробовал делать так

  public void GetClienst() //это тестовый блок, чтобы сократить потребление ресурсов
        {
            richTextBox1.Text = "";
            cmdProc.StartInfo = new ProcessStartInfo("cmd", "cls");

            cmdProc.Start();
            cmdProc.StartInfo = new ProcessStartInfo()
            {
                StandardErrorEncoding = Encoding.GetEncoding("CP866"),
                FileName = "cmd",
                Arguments = "/c netsh wlan show hostednetwork",
                UseShellExecute = false,
                CreateNoWindow = true,
                RedirectStandardOutput = true

            };

            cmdProc.Start();

            cmdProc.WaitForExit();
            richTextBox1.Text = cmdProc.StandardOutput.ReadToEnd();

        }

но в итоге запускается новый экземпляр cmd

второй таймер выводит уведомления о контретно подключенном / отключенном устр-ве

private void notificationsTimer_Tick(object sender, EventArgs e)
    {
        string deviceCount = Registry.CurrentUser.CreateSubKey(@"Software\MyFI\Settings").GetValue("ClientsCount", "0").ToString();
        notifyIcon1.Text = $"MyFI\nПодключенных устр-в: {ClientsNumber.Text}";

        if (ClientsNumber.Text != deviceCount)
        {
            if (Convert.ToInt32(ClientsNumber.Text) > Convert.ToInt32(deviceCount))
            {
                try
                {
                    foreach (string item in DeviceNameList.Items)
                    {
                        if (!DevNames.Contains(item))
                        {

                            DevNames.Add(item);
                            Registry.CurrentUser.CreateSubKey(@"Software\MyFI\Settings").SetValue("ClientsCount", ClientsNumber.Text);
                            notifyIcon1.ShowBalloonTip(3, $"Новое подключение ({item})", $"Подключенных устройств {ClientsNumber.Text}", ToolTipIcon.Info);
                            return;
                        }

                    }
                }
                catch { }
                Registry.CurrentUser.CreateSubKey(@"Software\MyFI\Settings").SetValue("ClientsCount", ClientsNumber.Text);
                notifyIcon1.ShowBalloonTip(3, "Новое подключение (UnknownDevice)", $"Подключенных устройств {ClientsNumber.Text}", ToolTipIcon.Info);
            }
            else if (Convert.ToInt32(ClientsNumber.Text) < Convert.ToInt32(deviceCount))
            {
                try
                {
                    foreach (string Device in DevNames)
                    {

                        if (!DeviceNameList.Items.Contains(Device))
                        {

                            DevNames.Remove(Device);
                            Registry.CurrentUser.CreateSubKey(@"Software\MyFI\Settings").SetValue("ClientsCount", ClientsNumber.Text);
                            notifyIcon1.ShowBalloonTip(3, $"Отключение ({Device})", $"Подключенных устройств {ClientsNumber.Text}", ToolTipIcon.Info);
                            return;
                        }
                    }
                }
                catch { }
                Registry.CurrentUser.CreateSubKey(@"Software\MyFI\Settings").SetValue("ClientsCount", ClientsNumber.Text);
                notifyIcon1.ShowBalloonTip(3, "Отключение (UnknownDevice)", $"Подключенных устройств {ClientsNumber.Text}", ToolTipIcon.Info);
            }

        }
        else
        {
        }

    }

Ответы (0 шт):