Форум: "Основная";
Текущий архив: 2009.09.06;
Скачать: [xml.tar.bz2];
ВнизСвободная память + TStringGrid Найти похожие ветки
← →
Student (2008-06-15 16:14) [0]Господа Мастера!
Необходимо определить момент, когда при увеличении StringGrid.RowCount и записи ячеек Delphi не сможет выделять память.
Есть программа (отладка + тест некоего оборудования), работающая в разных режимах: оперативный показ полного лога, только ошибки, отсутствие показа (вывод лога в файл), ...
В начале отладки, когда железо еще неработоспособно, оперативный вывод информации в грид очень удобен. Когда ошибки пофиксили, тест идет долго (~сутки). Понятно, что в этом случае включать вывод в грид не следует (не информативно, да и скорость падает), но юзеру не запретишь, а программа падает.
Хотелось бы перед тем, как доступной памяти станет мало, вывести соответствующий диалог и переключить отображение в лог-файл. Пробовал:
var Memory: TMemoryStatus;
...
GlobalMemoryStatus(Memory);
if Memory.dwAvailVirtual < MinMemAvail then ... // MinMemAvail = 256M
Работает, но непонятно, как правильно подобрать MinMemAvail.
Уверен, есть более правильный, простой и быстрый способ.
← →
Сергей М. © (2008-06-15 16:44) [1]
> Необходимо определить момент, когда при увеличении StringGrid.
> RowCount и записи ячеек Delphi не сможет выделять память
В этот момент будет возбуждено исключение класса EOutOfMemory.
Все что требуется - перехватить и обработать его должным образом.
← →
Student (2008-06-15 23:39) [2]Исключение (памяти не осталось) - уже поздно. Дальнейшие телодвижения (диалоговые окна, ...) также требуют немного памяти - может не получиться.
Хотелось бы поймать момент, когда память еще есть, но скоро кончится (было бы достаточно запаса 2М)
← →
Германн © (2008-06-16 01:07) [3]
> Student (15.06.08 23:39) [2]
>
> Исключение (памяти не осталось) - уже поздно. Дальнейшие
> телодвижения (диалоговые окна, ...) также требуют немного
> памяти - может не получиться.
> Хотелось бы поймать момент, когда память еще есть, но скоро
> кончится (было бы достаточно запаса 2М)
>
Что-то не так в Датском королевстве. Какая-то перемудренная логика.
Почему-бы не держать в гриде не более N строк при "оперативнои выводе информации"? При достижении этого числа скидывать M самых старых записей в лог. Ведь никакому юзеру никакой пользы нет от грида с туевой хучей строк. Он в них утонет!
← →
MsGuns © (2008-06-18 00:41) [4]Память - она как водка - никогда не угадаешь когда закончится
← →
Германн © (2008-06-18 01:48) [5]
> MsGuns © (18.06.08 00:41) [4]
>
> Память - она как водка - никогда не угадаешь когда закончится
>
В нынешнюю эпоху это сравнение не выдерживает никакой критики. Водку можно докупить всегда, в любое время суток, в любом количестве. :)
P.S. Кроме Ульяновской области.
← →
palva © (2008-06-18 09:25) [6]
> Student (15.06.08 16:14)
Во времена DOS был смысл максимально использовать оперативную память, чтобы минимизировать обращения к диску. Но и тогда были надстройки над ОС, делавшие такое стремление сомнительным. Теперь это вовсе не имеет смысла, поскольку задолго до исчерпания той памяти, о которой вам сообщает программа, появятся трудности с физической оперативной памятью, и ваша программа фактически перейдет в режим очень активной работы с файлом подкачки, что сильно замедлит работу. Если бы вы, зная логику обработки, сами распорядились работой с диском, то скорее всего замедление не было бы таким катастрофическим. Надеюсь, что вы все это понимаете, и ваш вопрос не связан с реальной программой, а вызван чисто академическим интересом.
Программу лучше не выводить на режими максимального использования ресурсов, чтобы она давала дышать другим программам и службам, работающим на компьютере.
← →
Ega23 © (2008-06-18 10:50) [7]
> В нынешнюю эпоху это сравнение не выдерживает никакой критики.
> Водку можно докупить всегда, в любое время суток, в любом
> количестве. :)
>
> P.S. Кроме Ульяновской области.
Щаз. У нас в Дубне уже года 2 как с 23 до 8 утра не продают ничего крепче 13 градусов.
← →
Anatoly Podgoretsky © (2008-06-18 14:06) [8]> palva (18.06.2008 9:25:06) [6]
если загнать в TStringGrid по максимуму, но чуть меньше, то пользователь давно до этого подохнет.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2009.09.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c