![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Вообщем у мнея многооконное приложение написанное в D7, кол-во одновременно используемых (созданных) форм может быть более 100 и т.д. Столкнулся с проблемой что при созданнии определенного кол-ва экземпляров базовой формы программа без ошибок падает. Заметил что при этом кол-во определяется выделением около 16Mb если смотреть в Диспетчере Задача Windows.
Написал простой пример: есть главная форма с кнопкой и лейблом и вторая форма пустая (TForm2), наследник TForm. По кнопке с главной формы выполняется следующее: procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin try for i:=0 to 30000 do begin TForm2.Create(Self); Label1.Caption := IntToStr(i); if (i mod 100) = 0 then Application.ProcessMessages; end; ShowMessage('OK'); except on E:Exception do ShowMessage(E.Message); end; end; Программа создает около 1300 экземпляров форм и падает (причём иногда вместе с Delphi). Самое интересное что если вместо TForm2.Create написать TForm.Create то прога спокойно делает 30000 экземпляров (больше не пробовал) причём с гораздо большей скоростью! Пробовал тот же пример в C++ Builder там всё замечательно работает, создаёт и 200000 форм с еще большей чем в дельфи скоростью и с гораздо меньшим жором памяти. 30000 экземпляров в D7 = 42Mb, 200000 экземпляров в Builder = 27Mb... Подскажите где копать, может какой менеджер памяти подключить другой... |