![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| DASTAD |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 14.10.2009 Репутация: 1 Всего: 1 |
Прошу помощи.
Пишу небольшое приложение мониторинга БД для себя. По задумке прога должна считывать инфу из БД раз в 30 сек, делать кое какие расчеты и вывести на экран. Вылетает применро через 4-5 часов работы с исключением Out of Memory. Как избежать Out of Memory. Интересны любые предложения Заранее благодарен! В проге использую следущую структуру данных
Общее описание работы В классе MonList раз в 30 сек вызывается метод Work, который перебирает все элементы массива Mon: PMonObject и запускает их фунцию Work. В функции TMonObject.Work происходит считывание из БД, некие вычисления и запись результата в память HistoryAdd. код HistoryAdd
При моем количестве объектов 250-300 и количестве измерений за день ~1000 -1500 такая структура должна занимать в памяти ~16-32 Мегабайт ;) Круглосуточная работа программы не планируется, только в течение рабочего дня. ЗЫ На компе 8гиг оперативки ОС Win7x64 и SQL Server 2005 64bit В диспетчере задач отображается, что моя програ занимает порядка 250-300 Мегабайт, порядка 500 SQL server и порядка 150-250 та прога, которая заносит информацию в БД. Общая используемая память в системе порядка 5,5 Гигабайт. |
||||
|
|||||
| northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
Имхо, происходит фрагментация памяти из-за многочисленных
-------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
| DASTAD |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 14.10.2009 Репутация: 1 Всего: 1 |
тогда, так понимаю, лучше сразу на N измерений выделить? после заполнения еще на N |
||||
|
|||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
есть мнение что каждый раз в два раза будет лучше. -------------------- Обижено школьников: 8 |
|||
|
||||
| northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
Тогда прога вылетит с ошибкой out of memory "на сколько-то позже чем через 4-5 часов". Не лучше ли не изгаляться так над "оперативной памятью программы", а использовать, ну например дисковую память? Записывать эту историю каждый раз на диск. Тогда и от динамических массивов можно отказаться в пользу статических. Что явный плюс при "долговременно-непрерывной" работе программы. P.S. Имею некоторый опыт разработки и поддержки программ, которые должны работать постоянно. Т.е. круглосуточно 365 дней в году, а раз в 4 года так и вовсе 366! -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: 5 Всего: 8 |
1)PMonObject = ^TMonObject; для чего?!!! объект это уже и так указатель. Тип PMonObject нужно выкинуть, ссылки на него заменить на TMonObject
2)Проблема с Out of memory мне кажется из-за того что система не может выделить непрерывный кусок памяти под History: array of TMonRec; выход переделать TmonRec = record на TmonRec = class, а History сделать TList-ом |
|||
|
||||
| Чучмек |
|
||||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 14 Всего: 41 |
А для чего служит резервирование?
Вызов SetLength для такого массива не допустим!!! Только myAddElement!!! Для каждого массива allocated_memory_size должен быть свой!!! Если необходимо несколько массивов, лучше создать свой класс. Если есть нечто типа m2:=m, то обязательно m2:=nil перед вызовом VirtualFree!!! p.s. Вряд ли получиться зарезервировать более 2Гбайт. У меня получилось только 1543503872 байт. Нет такого цельного куска в адресном пространстве процесса. Это сообщение отредактировал(а) Чучмек - 21.6.2011, 15:39 -------------------- умную мысль держи при себе, а дурной - поделись с другими |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |