![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| vadII |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 19.4.2006 Репутация: нет Всего: нет |
Вообщем у меня многооконное приложение написанное в D7, кол-во одновременно используемых (созданных) форм может быть более 100 и т.д. Столкнулся с проблемой что при созданнии определенного кол-ва экземпляров базовой формы программа без ошибок падает. Заметил что при этом кол-во определяется выделением около 16Mb если смотреть в Диспетчере Задача Windows.
Написал простой пример: есть главная форма с кнопкой и лейблом и вторая форма пустая (TForm2), наследник TForm. По кнопке с главной формы выполняется следующее:
Программа создает около 1300 экземпляров форм и падает (причём иногда вместе с Delphi). Самое интересное что если вместо TForm2.Create написать TForm.Create то прога спокойно делает 30000 экземпляров (больше не пробовал) причём с гораздо большей скоростью! Пробовал тот же пример в C++ Builder там всё замечательно работает, создаёт и 200000 форм с еще большей чем в дельфи скоростью и с гораздо меньшим жором памяти. 30000 экземпляров в D7 = 42Mb, 200000 экземпляров в Builder = 27Mb... Подскажите где копать, может какой менеджер памяти подключить другой... |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
если форма полностью инициализируется в run-time, т.е. ты не балуешься установкой свойство формы и её объектов "вручную", то можно ускорить всю байду путём отказа от загрузки *.dfm файла.
т.е. в твоём примере можно вместо TForm2.Create сказать TForm2.CreateNew. но меньше памяти она жрать не станет, насколько я понимаю. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| vadII |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 19.4.2006 Репутация: нет Всего: нет |
Проблема не в этом, в примере TForm2 просто наследник TForm без дополнительных методов, свойств, переменных, вообщем пустая форма |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
vadII, я понимаю
очевидно, что CreateNew занимается именно созданием нового экземпляра класса, а InitInheritedComponent - инициализацией этого экземпляра. если от этой инициализации отказаться (что допустимо, если ты работаешь без использования DFM), то производительность сразу увеличиться в разы - проверь скорость твоего примера, если Create заменить на CreateNew. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| vadII |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 19.4.2006 Репутация: нет Всего: нет |
Спасибо, но скорость меня совершенно не интересует, меня волнует предел по кол-ву форм (как пример), при том что этого предела нет в C++ Builder который использует тежи VCL.
У меня в проекте не 200000 и не 1300 экзепляров форм, а реально меньше, но при этом можно тупо и 1300 понаоткрывать и более. При этом базовая форма содержит много доп.компонентов (чарты, гриды и прочее). Формы не всегда отображается на экране, они открываются и закрываются (но не освобождаются из памяти, т.к. содержат в себе изменения который сделал пользователь), и пока пользователь не сохранит изменения НЕЛЬЗЯ ничего освобождать, при этом теоретически пользователь может сделать измения в сотнях формах, и вот на 101 прога упадёт... При этом в проге нет никаких утечек памяти, подлюченный менеджер памяти FastMM4 молчит. Пока я могу создать из программы всего около 180 экземпляров, что оч.мало, но сейчас наткнулся на то что если из базовой формы убрать TMainMenu то кол-во сразу возрастает до 700 |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 28 Всего: 89 |
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
![]()
|
| Правила форума "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. |