Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.09.06;
Скачать: CL | DM;

Вниз

Свободная память + 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
15-1246890568
Unknown user
2009-07-06 18:29
2009.09.06
Онлайн хелп


2-1246784572
Neket
2009-07-05 13:02
2009.09.06
Как преобразовать string в PAnsiChar.


15-1246653254
Юрий
2009-07-04 00:34
2009.09.06
С днем рождения ! 4 июля 2009 суббота


15-1246624006
Бисовецкий Андрей
2009-07-03 16:26
2009.09.06
Помогите найти правильное решение баз данных. ПОМОГИТЕ СРОЧНО!!


15-1246859821
AlexDan
2009-07-06 09:57
2009.09.06
ещё немного по html..