| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > Перерисовка окна с DBGRidEH |
| Автор: AndreyZ53 20.3.2014, 09:33 |
| Доброго времени суток дорогие форумчане! Я обращаюсь с такой проблемой. У меня на форме (главной) на всю ширину и высоту установлен DBGridEh, в котором отображается 30-40 записей. Данная форма у меня прячется в трей, в течение дня. То есть, пользователь открыл с трея, данные обновились, он посмотрел, что необходимо и дальше ее свернул. Вопрос заключается в том, что когда разворачиваем программу из трея, окно программы, где расположен грид, не отображается в течение 1-2 секунд, я прикладываю картинку, как у меня отображается грид. Через 2 секунды, все данные в нем обратно нормально отображаются. Вопрос вот в чем, можно как-то сделать, чтобы при разворачивании из трея, грид сразу нормально отображался с формой, а не ждать 1-2-3-4 секунды (если компьютер работает 1-2 дня, то когда приходишь и разворачиваешь из трея, оно около 3-5 секунд перерисовывает). ![]() Заранее спасибо за какие-то советы, помощь и так далее! |
| Автор: Alexeis 20.3.2014, 10:51 |
| Судя по картинке это Windows XP, который страшно любит экономить оперативку, даже если ее 8 гигов будет. Как только прога улетает в трей он радостно выгружает ее из оперативы и свопит на диск. При попытке показа возникают ошибки доступа к памяти медленная операция доставания из свопа. Можно поэкспериментировать вот с этой функцией SetProcessWorkingSetSize - она позволяет менять рабочий набор программы (в оперативке) позволяя держать больше данных программы. Можно изначально задать проге побольше оперативки, а можно вместо того, чтобы сразу показывать окно, сначала вызвать SetProcessWorkingSetSize, заставив Windows загрузить бОльший рабочий набор в оперативу, а затем только вызывать у форм функцию Show. После вызова функции Hide можно напротив вызвать SetProcessWorkingSetSize с параметрами -1 -1, т.е. вернуть состояние по умолчанию. А может в кешировании нуждается не сама прога, а только данные, к которым обращается грид. Т.е. для отрисовки он опрашивает свой источник данных, а источник данных не торопиться. Нет данных нечего рисовать, вот и ждет. |
| Автор: AndreyZ53 20.3.2014, 12:14 |
| Alexeis, Хм, спасибо большое за совет. Действительно, я попробовал воспользоваться Вашей функцией и у меня получилось. Программа почти сразу же отрисовывает мой грид, правда она сейчас больше памяти потребляет, эдак на 10 МБ где-то. Плюсую Вам, если что-то пойдет не так, я обращусь еще, если не против Вы |