2013-03-17 3 views
2

Предположим, у вас есть приложение, разработанное с помощью WPF при запуске приложения и его минимизации через некоторое время (скажем, 30 минут и более), при восстановлении окна приложения вы обнаружите, что он заморожен (или медленный) в течение нескольких секунд.Почему мое приложение WPF медленно замедляется?

Мой вопрос, почему он становится медленным и есть ли способ его исправить?

+0

У вас возникли проблемы с диспетчером задач, если потребление памяти приложения увеличилось? – apomene

+0

Да, я сделал, память нормальная, я думаю, что это что-то связано с графикой. –

+0

THaat меня очень беспокоит, потому что я строю большой проект WPF, который я еще не тестировал его производительность ... Вы используете нагрузку элементов управления в своем приложении ? – apomene

ответ

2

Это не свойство WPF, это свойство виртуальной памяти.

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

Когда программа, для которой эта страница памяти относится к попыткам доступа к ней, называется «ошибкой страницы» - ОС обнаруживает, что страница не находится в ОЗУ, а на диске, и она должна прочитать ее в ОЗУ до выполнение продолжается. Это относительно медленно, так как чтение с жесткого диска происходит медленнее, чем чтение из ОЗУ. Если программа не была запущена в течение некоторого времени, возможно, что ВСЕ ее страницы были выгружены в ОЗУ - и поэтому она будет медленной, пока она не перестанет поражать ошибки страницы.

Я не сталкивался с тем, как справиться с этой проблемой, но вы можете попробовать такие вещи, как:

1) Написание программы вести себя в асинхронном режиме - так в то время как один поток делает вещи, которые вызывают страницы неисправности, программа в противном случае реагирует на другие потоки

2) Умышленное касание каждой страницы вашей памяти, чтобы все это было загружено (рекомендуется только в том случае, если ваша программа настолько важна, что она заслуживает того, чтобы постоянно занимать ОЗУ, даже если не используется!)

3) Решение «бросить оборудование у него» - купите больше ОЗУ :)

+0

Спасибо @Patashu, это именно то, что я хотел знать. чтобы решить эту проблему, я избегаю минимизации своего приложения, поэтому я отправляю его с экрана (установите позицию -1000) и сделал таймер, который активирует окно каждые 10 минут, поэтому он продолжает работать в ОЗУ, и он отлично работает, спасибо вы. –

+0

@Dries Не забудьте «принять» мой ответ, если он помог решить вашу проблему. – Patashu

Смежные вопросы