Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2011.03.13;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.002 c
2-1292760230
RUu
2010-12-19 15:03
2011.03.13
о сравнении дат в SQL


1-1248884182
Tornado
2009-07-29 20:16
2011.03.13
Как построить график?


15-1290750614
TUser
2010-11-26 08:50
2011.03.13
Об ответственном обращении с животными


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


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский