Моя программа получает повышение производительности с помощью функции EmptyWorkingSet? Это опасно? - PullRequest
1 голос
/ 21 апреля 2011

Мы разрабатываем программное обеспечение для автоматизации ресторанов (используя VS.NET C #).И мы используем POS-продукты, большинство из которых имеет процессор Celeron или Atom с оперативной памятью 512 МБ или 1 ГБ.Итак, в начале мы знаем, что мы не можем получить более мощный ПК (я видел предложение типа «Получите лучший компьютер для вашего клиента» :)).

У нас проблема с памятью.Для представления корзины реального покупателя мы используем панель, добавляем настраиваемый элемент управления для представления товара в корзине.Это означает, что многие элементы управления добавляются на панель, а затем удаляются (функция Panel.controls.Clear.) Этот метод вызывает утечку памяти, и программа работает медленно.После поиска и поиска в Google я обнаружил, что функция Panel.Control.Clear () очищает все элементы управления в панели, но не из памяти.Поэтому я отключил панель, чтобы проверить, и все работает нормально.Нет утечки памяти больше.Поэтому я решил удалить эту панель корзины, чтобы сохранить память.Но позже я нашел здесь очень полезные предложения, такие как EmptyWorkingSet.

    [DllImport("psapi.dll")]
    static extern int EmptyWorkingSet(IntPtr hwProc);

    static void MinimizeFootprint()
    {
        EmptyWorkingSet(Process.GetCurrentProcess().Handle);
    }

Затем я добавил код, активировал панель корзины, и ничего не изменилось.Производительность по-прежнему хорошая. Отсутствует утечка памяти, производительность не снижается.Но некоторые говорят, что в здесь и здесь EmptyWorkingSet может вызывать сбои страниц, и это опасно.Я тестирую программу и ничего не случилось.Отлично работает.Вот мои варианты

  1. Удалить панель корзины, которая вызывает проблемы с памятью.
  2. После очистки пользовательских элементов управления из cartPanel удалите пользовательские элементы управления из памяти (я не знаю, какно я могу понять это)
  3. ИСПОЛЬЗОВАТЬ EmptyWorkingSet, но это может вызвать сбои страниц (правда, я не знаю, что означает эта ошибка страницы)

ТАК ЧТО ВЫ СКАЖИТЕ

1 Ответ

1 голос
/ 21 апреля 2011

Я думаю, что проблема в том, что вы очищаете коллекцию элементов управления, когда вы должны их утилизировать. Кроме того, убедитесь, что вы отсоединяете любые обработчики событий от элементов управления, прежде чем очищать их, так как обработчики событий устанавливают ссылки между объектами, так что слушатель события вызовет задержку объекта, имеющего право на коллекцию. Я бы пошел по этому пути, прежде чем пытаться очистить рабочий набор.

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