Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.03.13;
Скачать: CL | DM;

Вниз

Delphi, Flash, Адресное пространство, производительность, размер   Найти похожие ветки 

 
Joker ©   (2009-07-09 00:55) [0]

Имеется некий 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://WEB PATH/FLASHbyteCODE.swf";
FlashFrame.Play;
end;

end.


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

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

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

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

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


 
Rouse_ ©   (2009-07-09 10:28) [1]

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


 
Joker ©   (2009-07-09 15:45) [2]

Фишка в том, что часть 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?

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

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


 
KilkennyCat ©   (2009-07-09 15:47) [3]


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

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


 
Joker ©   (2009-07-09 15:47) [4]

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


 
KilkennyCat ©   (2009-07-09 16:04) [5]

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


 
KilkennyCat ©   (2009-07-09 16:05) [6]

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


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


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


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

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


 
Joker ©   (2009-07-09 16:14) [8]


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


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

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


 
KilkennyCat ©   (2009-07-09 17:29) [9]


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


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

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


 
KilkennyCat ©   (2009-07-09 17:32) [10]

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


 
KilkennyCat ©   (2009-07-09 17:35) [11]

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


 
Joker ©   (2009-07-09 17:51) [12]

Flex SDK в основном


 
Joker ©   (2009-07-25 17:58) [13]

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



Страницы: 1 вся ветка

Текущий архив: 2011.03.13;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.008 c
1-1248707578
Oleg
2009-07-27 19:12
2011.03.13
Docking


15-1291066179
Юрий
2010-11-30 00:29
2011.03.13
С днем рождения ! 30 ноября 2010 вторник


2-1292598131
Цукор5
2010-12-17 18:02
2011.03.13
Позиция окон в MessageDlg и ShowMessage


15-1290979780
Юрий
2010-11-29 00:29
2011.03.13
С днем рождения ! 29 ноября 2010 понедельник


2-1292862496
v_a_belousov
2010-12-20 19:28
2011.03.13
Авторизация в программе