Как очистить / уничтожить задачи, чтобы не перегружать процессор в приложении WPF?

#c# #wpf #cpu-usage #kiosk

#c# #wpf #загрузка процессора #киоск

Вопрос:

В настоящее время я создаю приложение-киоск с использованием WPF. У меня есть одно главное окно и несколько пользовательских элементов управления (страниц). После последней страницы приложение перенаправит на первую страницу, чтобы запустить весь процесс заново. Я заметил, что после трехкратного запуска полного потока приложение выйдет из строя / зависнет из-за перегрузки процессора и памяти. Однако я решаю проблему перегрузки памяти, объявляя следующее

     [DllImport("KERNEL32.DLL", EntryPoint = "SetProcessWorkingSetSize", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
    internal static extern bool SetProcessWorkingSetSize(IntPtr pProcess, int dwMinimumWorkingSetSize, int dwMaximumWorkingSetSize);

    [DllImport("KERNEL32.DLL", EntryPoint = "GetCurrentProcess", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
    internal static extern IntPtr GetCurrentProcess();
  

и добавление этого кода в событие Unloaded().

         IntPtr pHandle = GetCurrentProcess();
        SetProcessWorkingSetSize(pHandle, -1, -1);
  

Этот код способен решить проблему перегрузки памяти, но проблема перегрузки процессора все еще существует. Кто-нибудь, пожалуйста, может мне с этим помочь, пожалуйста? Что мне добавить в событие Unloaded (), чтобы освободить процессор?

Комментарии:

1. Какой тип задач вы запускаете в приложении? Можете ли вы сделать меньше работы, уменьшить вызовы таймера или что-нибудь связанное?

2. Вам необходимо предоставить более подробную информацию. Какую интенсивную работу с процессором вы выполняете и как? Какую работу с интенсивным использованием памяти вы выполняете и как? Не забывайте освобождать неуправляемые ресурсы после выхода с каждой страницы, реализуя шаблон Dispose. Каждый IDisposable должен быть удален. Альтернативно повторно использовать созданные ресурсы. Проверьте свое приложение на наличие утечек памяти. Привязка данных без реализации INotifyPropertyChanged и события без подписки являются печально известными кандидатами на создание утечек памяти. Без подробностей помощь невозможна. Очевидно, у вас где-то есть какой-то вонючий код.

3. я использую фоновый рабочий и таймер почти на каждой странице. но я закрываю каждый раз

4. Таймеры и рабочие группы brackground являются хорошими источниками памяти и справляются с утечками.

5. Добро пожаловать в асинхронное программирование . BackgroundWorker это древний унаследованный класс. Timer не требуется в 99% сценариев, если вы знакомы с async/await . Надеюсь, вы не в Framework 3.5 и Windows XP.