-
Господа Мастера! Необходимо определить момент, когда при увеличении StringGrid.RowCount и записи ячеек Delphi не сможет выделять память. Есть программа (отладка + тест некоего оборудования), работающая в разных режимах: оперативный показ полного лога, только ошибки, отсутствие показа (вывод лога в файл), ... В начале отладки, когда железо еще неработоспособно, оперативный вывод информации в грид очень удобен. Когда ошибки пофиксили, тест идет долго (~сутки). Понятно, что в этом случае включать вывод в грид не следует (не информативно, да и скорость падает), но юзеру не запретишь, а программа падает. Хотелось бы перед тем, как доступной памяти станет мало, вывести соответствующий диалог и переключить отображение в лог-файл. Пробовал:
var Memory: TMemoryStatus;
...
GlobalMemoryStatus(Memory);
if Memory.dwAvailVirtual < MinMemAvail then ...
Работает, но непонятно, как правильно подобрать MinMemAvail. Уверен, есть более правильный, простой и быстрый способ.
-
> Необходимо определить момент, когда при увеличении StringGrid. > RowCount и записи ячеек Delphi не сможет выделять память
В этот момент будет возбуждено исключение класса EOutOfMemory. Все что требуется - перехватить и обработать его должным образом.
-
Исключение (памяти не осталось) - уже поздно. Дальнейшие телодвижения (диалоговые окна, ...) также требуют немного памяти - может не получиться. Хотелось бы поймать момент, когда память еще есть, но скоро кончится (было бы достаточно запаса 2М)
-
> Student (15.06.08 23:39) [2] > > Исключение (памяти не осталось) - уже поздно. Дальнейшие > телодвижения (диалоговые окна, ...) также требуют немного > памяти - может не получиться. > Хотелось бы поймать момент, когда память еще есть, но скоро > кончится (было бы достаточно запаса 2М) >
Что-то не так в Датском королевстве. Какая-то перемудренная логика. Почему-бы не держать в гриде не более N строк при "оперативнои выводе информации"? При достижении этого числа скидывать M самых старых записей в лог. Ведь никакому юзеру никакой пользы нет от грида с туевой хучей строк. Он в них утонет!
-
Память - она как водка - никогда не угадаешь когда закончится
-
> MsGuns © (18.06.08 00:41) [4] > > Память - она как водка - никогда не угадаешь когда закончится >
В нынешнюю эпоху это сравнение не выдерживает никакой критики. Водку можно докупить всегда, в любое время суток, в любом количестве. :)
P.S. Кроме Ульяновской области.
-
> Student (15.06.08 16:14)
Во времена DOS был смысл максимально использовать оперативную память, чтобы минимизировать обращения к диску. Но и тогда были надстройки над ОС, делавшие такое стремление сомнительным. Теперь это вовсе не имеет смысла, поскольку задолго до исчерпания той памяти, о которой вам сообщает программа, появятся трудности с физической оперативной памятью, и ваша программа фактически перейдет в режим очень активной работы с файлом подкачки, что сильно замедлит работу. Если бы вы, зная логику обработки, сами распорядились работой с диском, то скорее всего замедление не было бы таким катастрофическим. Надеюсь, что вы все это понимаете, и ваш вопрос не связан с реальной программой, а вызван чисто академическим интересом.
Программу лучше не выводить на режими максимального использования ресурсов, чтобы она давала дышать другим программам и службам, работающим на компьютере.
-
> В нынешнюю эпоху это сравнение не выдерживает никакой критики. > Водку можно докупить всегда, в любое время суток, в любом > количестве. :) > > P.S. Кроме Ульяновской области.
Щаз. У нас в Дубне уже года 2 как с 23 до 8 утра не продают ничего крепче 13 градусов.
-
> palva (18.06.2008 9:25:06) [6]
если загнать в TStringGrid по максимуму, но чуть меньше, то пользователь давно до этого подохнет.
|