Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Delphi, Flash, Адресное пространство, производительность, размер [D7]


Joker ©   (2009-07-09 00:55:00) 

Имеется некий swf(600-700кб) со своим набором библиотек, графики, звуков и конфигураций в формате XML(все вместе порядка 80мб).

Имеет работоспособное приложение, написанное на  Delphi. Задача приложения - запустить flash и выделить под него достаточно памяти и сисетмных ресурсов для сведения тормозов обработки флеш к минимуму.

Для написания и компиляции использовалась компонент Delphi - надстройка над FlashControl f-in-box.

С браузера, т.е. непосредственно из сети swf практически не подтормаживает и достаточно адекватно реагирует на нажатия клавишь и действия мышью.

вот код:


unit MainUnit;

interface

uses
 Windows, SysUtils, Classes, Graphics, Controls, Forms, Messages, Dialogs,
 FlashPlayerControl, StdCtrls, ShellApi, ComCtrls;

type
 TMainForm = class(TForm)
   CheckBoxSounds: TCheckBox;
   FlashFrame: TTransparentFlashPlayerControl;
   PlayNetwork: TButton;
   procedure FormCreate(Sender: TObject);
   procedure CheckBoxSoundsClick(Sender: TObject);
   procedure PlayNetworkClick(Sender: TObject);

private
   FlashPath: String;
   FPlaySWF: Boolean;

procedure OnGlobalLoadExternalResource(const URL: WideString; Stream: TStream);
 public
 { Public declarations }
 end;

var
 MainForm: TMainForm;

implementation

{$R *.DFM}

procedure TMainForm.FormCreate(Sender: TObject);
begin
 SetGlobalOnLoadExternalResourceHandler(OnGlobalLoadExternalResource);
 CheckBoxSounds.Checked := FlashPlayerControl.GetAudioEnabled;
 FlashFrame.Movie := ExtractFileDir(Application.ExeName) + '\FLASHbyteCODE.swf';
 FlashFrame.Play;
 FPlaySWF := True;
end;

procedure TMainForm.OnGlobalLoadExternalResource(const URL: WideString; Stream: TStream);
var
 FileStream: TFileStream;
 MemoryStream: TMemoryStream;
begin
 if URL = 'anything' then
 begin
   if Length(FlashPath) > 0 then
   begin
     FileStream := TFileStream.Create(FlashPath, fmOpenRead);
     MemoryStream := TMemoryStream.Create;
     MemoryStream.LoadFromStream(FileStream);
     MemoryStream.SaveToStream(Stream);
     FileStream.Free;
     MemoryStream.Free;
   end;
 end;
end;

procedure TMainForm.CheckBoxSoundsClick(Sender: TObject);
begin
FlashPlayerControl.SetAudioEnabled(CheckBoxSounds.Checked);
end;

procedure TMainForm.PlayNetworkClick(Sender: TObject);
begin
FPlaySWF := True;
FlashFrame.Movie := ' http://WEBPATH/FLASHbyteCODE.swf';
FlashFrame.Play;
end;

end.


Проблема следующего характера: конечный exe весит 600+ кб, если компилировать в Delphi 2009, в Delphi 7 получается 400+.

Приложение отлично работает, но производительность оставляет желать лучшего. Тестировалось на разрешении экрана 1280х800.

Каким образом можно искусственно заставить приложение выделять больше памяти и ресурсов под обработку всего этого дела?  Как можно птимизировать код?

Я совсем недавно начал писать на delphi  и все мои поиски по данному вопросу ни к чему не привели. Прошу совета, куда копать(желательно с примером или со ссылкой).

С уважением, Дмитрий


Joker   (2009-07-25 17:58:00) [1]

Все ясно ... "Никто ничего не знает". Буду обсуждлать в других местах ... Всем успехов (:


Joker   (2009-07-09 17:51:00) [2]

Flex SDK в основном


KilkennyCat   (2009-07-09 17:35:00) [3]

86 килобайт ХМЛ. это он еще не совсем полный :)


KilkennyCat   (2009-07-09 17:32:00) [4]

не влазеит, блин. :)


KilkennyCat   (2009-07-09 17:29:00) [5]


> Можете себе представить флэшку размером в пол мегабайта,
>  которая использует конфиги на XML и динамически подгружает
> в себя другие флэш и бинарники из библиотеки, время от времени
> общаясь с сервером?


всего в полмегабайта... я не то чтоб представить... у меня есть и под 3 мега,причем, это не рисунки и не звук, у меня всегда основной упор на программную анимацию.
Все зависит от того, как все сделано. Если там куча неудаляемых и вечнокрутящихся onEnterFrame, если неиспользуемые ролики не удалять, конечно, сожрет все ресурсы.
Я когда первые флэшки писал, так они под 100% проц грузили.
А теперь у меня ваще нет onEnterFrame - все работает только тогда, когда надо.

Пример конфига на ХМЛ. Не тормозит :)


Joker   (2009-07-09 16:14:00) [6]


> KilkennyCat ©   (09.07.09 16:04) [5]
> я когда-то давно в 7-ке делал презентацию картинок, ну и
> флэшек... для художника... ща глянул, нифига уже не понял,
>  че-там наворотил :)
> использовано: ShockwaveFlashObjects_TLB, ShockwaveEx, ShockwaveList
> ничего не тормозило
>
>


Хмм... Можете себе представить флэшку размером в пол мегабайта, которая использует конфиги на XML и динамически подгружает в себя другие флэш и бинарники из библиотеки, время от времени общаясь с сервером?

Мелкие flash летают, но тут все сложнее...


Joker   (2009-07-09 16:09:00) [7]


> KilkennyCat ©   (09.07.09 15:47) [3]
>
> > Flash не имеет программной и аппаратной поддержки видеокарты
>
> ага. поэтому отрисовывает телепатически.


А без сарказма нельзя?

В чем-то вы правы. Если намек был на Flash 10 с заявленной поддержкой аппаратного ускорения визуализации, то потребуется видеокарта с полной поддержкой DX10. Windows XP отпадает, вместе с ним огромное количество видеокарт. У меня для примера стоит windows 7, видео с поддержкой DX10, сама полноценная DX10, но рельно ощутить это производительность, увы не приходится


KilkennyCat   (2009-07-09 16:05:00) [8]

и кстати, если на флэшке вызвать контекстное меню, то там есть пунктик использовать граф. ускорение....


KilkennyCat   (2009-07-09 16:04:00) [9]

я когда-то давно в 7-ке делал презентацию картинок, ну и флэшек... для художника... ща глянул, нифига уже не понял, че-там наворотил :)
использовано: ShockwaveFlashObjects_TLB, ShockwaveEx, ShockwaveList
ничего не тормозило


KilkennyCat   (2009-07-09 15:47:00) [10]


> Flash не имеет программной и аппаратной поддержки видеокарты

ага. поэтому отрисовывает телепатически.


Joker   (2009-07-09 15:47:00) [11]

p.s.: Получившееся приложение хоть и неприятно дергает графику при изменении, но жрет меньше памяти, работает быстрее и отклик действий пользователя(клавиатура и мышь) куда четче ... Наполовину эффект достигнут


Joker   (2009-07-09 15:45:00) [12]

Фишка в том, что часть web browser'ов использует flash.ocx, который является activeXплагином. Так вот, критично delphi, который юзает надстройку над InternetExplorer, который в свою очередь беспощадно режет FPS, что в сою очередь приводит " покадровке" при отрисовке flash'ового swf .... и т.д.  Вобщем выглядит это, как говно дергающееся....

FF и Chrome используют плагины, но где же взять код. Именно тот код, который будет делать то, что нужно и так быстро, как только возможно. Плюсом cashe надо предусмотреть т.к. 70мб(80+ на вырост) должны быть "под рукой".

В общем с производительность разобрался сам. С размером файла не вышло к сожалению :(

Почему именно FlashPlayerControl? Это все, что я смог найти для решения задачи... Он является компонентом к Delphi имеет неплохую функциональну обертку для flash. А так как в прикладном программировании я полный, не побоюсь этого слова, лох, то связка "Delphi 2009 + SampleCode + WorkableComponent" наиболее удачной и единственной возможной.

Теперь о насущном:

* Flash не имеет программной и аппаратной поддержки видеокарты. Сильно грузит CPU и ОЗУ
* Есть вариант приложения написанный на С, который использует flash.ocx напрямую из своего каталога. Упаковано   неизвестно чем и непонятно как.
Минусы приложения: размер 1.5мб, лишние прибамбасы(запись видео с настройкой кодека и качества, скриншоты, настройка прокси и т.д.) exe, утечки памяти. Жутко тормозит, съедает рабочий стол и оооочень долго кубаторит, но работает.

Достаточный набор сюрпризов, чтоб отказаться от него.

Какие способы и меры можно предпринять, чтобы ускорить обработку изменений изображения во внутреннем FlashFrame? Решение проблемы кроется где-то неглубоко. Резон полагать, что оно есть: Это искусственное занижение браузером на activeX числа кадров(FPS).

Есть ли в делфи какие либо способы контролировать подобные вещи? Что такое AlphaBlending?

Ну думаю достаточно изложил суть проблемы... Сори, вторые сутки без сна, штурмую информационные просторы в поисках истины...

Буду очень благодраен за любые наводки


Rouse_   (2009-07-09 10:28:00) [13]

Выкинь FlashPlayerControl вмето него размести WebBrowser в который и подгружай свой флэш


Наверх

Титульная страница Поиск, карта сайта Написать письмо