Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1245070048
pest
2009-06-15 16:47
2009.09.06
программно вырезать указанный файл в буфер обмена


15-1246891880
{RASkov}
2009-07-06 18:51
2009.09.06
Двусторонняя печать


2-1246940192
f-a-l-l-e-n
2009-07-07 08:16
2009.09.06
Проблема с richedit


15-1247053069
Дуб
2009-07-08 15:37
2009.09.06
О чем собственно говорит иностранец?


15-1246798358
TIF
2009-07-05 16:52
2009.09.06
FF3.5 - Включить приватный просмотр





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский