Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flash Приложения: AIR, Zinc и тд.

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.10.2009, 14:53
nick_van_rijn вне форума Посмотреть профиль Отправить личное сообщение для nick_van_rijn Найти все сообщения от nick_van_rijn
  № 1  
Ответить с цитированием
nick_van_rijn

Регистрация: Feb 2009
Сообщений: 33
По умолчанию Течет память ExternalInteface

Помогите кто может, при частом вызове функций Flash из конетейнера течет память - мегабайтам.... думал что то в коде, выключил весь код как в контейнере так и во флэше, все тоже самое, значит дело именно в вызовах ExternalInterface.... не срабатывает GC и все тут, когда вызовов нет или flash работает внутри себя память не течет может кто сталкивался, принимаются самые буйные идеи... (GC насильно запускал разными способами, 0 результата).


нашел одно упоминание о проблеме I'm having trouble with a memory leak in my application. I'm hoping someone out there can help me find a fix or workaround, or tell me what I'm doing wrong.The leak seems to be coming from the flash external interface; specifically, IShockwaveFlash.SetReturnValue(String). My application is written in Visual Basic 2008, connecting to Flash 9.0.124.0 (activex version).I've written a fairly simple flash/VB program pair to illustrate the problem.The SWF contains a button, 2 dynamic text fields, and the ActionScript 2 code below.The VB project contains a Form with a AxShockwaveFlash object and the VB code below.When this program is run, and the button is clicked a lot (10's of thousands of times), the application's memory creeps up and never seems to fall back down. If the string passed to SetReturnValue is longer, memory is consumed faster. But if the call to SetReturnValue is commented-out, the application's memory usage remains stable.If anyone has any suggestions on how to proceed, I'd be grateful.(By the way: I'm using a freeware program called DoItAgain to automate the button pressing.) но идей решения не послеовало... я в общем то уже смирился с тем что течет flash10.ocx и все же....

Adobe Flash CS3, Delphi + flash10.ocx, FlashPlayer 10,0,32,18

Добавлено через 20 минут
[IMG]http://pic.************/uploads/091002/C7ZRVSRk1V.jpg[/IMG]
вот тут часто вызываются методы флэша без единой строки кода но видно какими объемами течет память.


Последний раз редактировалось nick_van_rijn; 02.10.2009 в 15:15.
Старый 02.10.2009, 16:27
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Человек пишет на .NET, вы на дэлфи. Там юзаются какие-то хитрые обертки для плеера, я знаю. Чего там течет-сказать трудно. Сделал свой пример на SetReturnValue и CallFunction.
http://mdm-zinc.narod.ru/pub/res.zip
CallFunction вызывается по правой кнопке, SetReturnValue происходит по нажатию на кнопку Button в окне плеера.
Посмотрите, сравните. Кода там тоже практически нет. Память подтекает, но чтоб катастрофичемки.. нет, пожалуй.
Да, плеер тоже 10, AS2-ролик.

Старый 02.10.2009, 17:00
nick_van_rijn вне форума Посмотреть профиль Отправить личное сообщение для nick_van_rijn Найти все сообщения от nick_van_rijn
  № 3  
Ответить с цитированием
nick_van_rijn

Регистрация: Feb 2009
Сообщений: 33
спасибо за пример, действительно по сравнению с моей утечкой, тут можно считать стабильной память,на чем написан код контейнера? среди включенных модулей нет Flash10b.ocx на который я и грешу...
код вызова флэш функции
Код AS3:
// XMLDoc.XML.Strings - имя метода и его параметры 
res:=FlashObject.CallFunction(XMLDoc.XML.Strings[1]);
код получения ответа от флэша

Код AS3:
procedure TMyFlashGameSea.CallByFlash(ASender : TObject; const ARequest : WideString);
var //сюда попадаем когда флэш вызывает метод паскаля
     //ARequest- xml запрос с именем метода и его параметрами
 Method : string;
 iParameters : TVarArray;
begin
 FRetFlash(ARequest, Method, iParameters); //разбираем XML
 
 if Method = 'Log' then
  begin ....
и когда это происходит многократно начинается лавинообразная утечка.... с ощущением что CallFunction слабо синхронна основному потоку

Добавлено через 19 минут
для флэша так:
Код AS3:
// делаем доступными  для внешнего контейнера функции
		ExternalInterface.addCallback ("AddWinTableString",AddWinTableString);
        ExternalInterface.addCallback ("ChangeWinTableSttring",ChangeWinTableString);...
 тела функций пустые
Код AS3:
Тут вызываем метод делфи
ExternalInterface.call("Log","Нажата кнопка


Последний раз редактировалось nick_van_rijn; 02.10.2009 в 17:13.
Старый 02.10.2009, 17:21
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 4  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Пример малость подправил, несущественно.
Написан пример на С++ и ATL. Flash10а.ocx и сам мувик сидят в ресурсах, можете посмотреть резхакером. Оттуда и грузятся. По вашему коду сказать мало что могу, дэлфями занимался мало.
Попробуйте версию плеера пониже, что ли.. не знаю, чем вам помочь. Видимо, дело таки в обертке.
Код С++
Код:
HRESULT  CFlashEventDispatch::FlashCall_Handler (_bstr_t request)
{
// request не анализирую, ибо пример.
	CString msg = "<string>SetReturnValue rules ";
	CString t;
	static int i = 0;
	t.Format(L"%X",i);
	m_spPlayer->SetReturnValue(_bstr_t(msg+t+" times!</string>"));
	i++;
    return S_OK;
}
...
LRESULT CFlashHost::OnRButtonDown(UINT /* uMsg */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& bHandled)
{
	static int i = 0;
	CString msg = "<invoke name=\"newfunc\" returntype=\"xml\"><arguments><string>Call Function rules ";
	CString t;
	t.Format(L"%d",i);
	m_spPlayer->CallFunction(_bstr_t(msg+t+" times!</string></arguments></invoke>"));
	i++;
    return 0;
}
Код AS 2.0
Код:
import flash.external.*;
btn.onRelease = function() {
	out.text = String(ExternalInterface.call("sayHello", "по-фик что"));
};
function newfunc(arg:String):Void {
	out.text = arg + newline;
}
ExternalInterface.addCallback("newfunc", this, newfunc);


Последний раз редактировалось alexcon314; 02.10.2009 в 17:45.
Старый 02.10.2009, 17:41
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 5  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Я думаю, что эти вещи связаны:
http://bugs.adobe.com/jira/browse/TH-6308
http://bugs.adobe.com/jira/browse/TH-6486 < тут говорится, что вроде как пофиксили... но, судя по коментам - не понятно толком...
__________________
Hell is the possibility of sanity

Старый 02.10.2009, 17:48
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 6  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Login required на обеих ссылках.

Старый 02.10.2009, 17:59
nick_van_rijn вне форума Посмотреть профиль Отправить личное сообщение для nick_van_rijn Найти все сообщения от nick_van_rijn
  № 7  
Ответить с цитированием
nick_van_rijn

Регистрация: Feb 2009
Сообщений: 33
[IMG]http://pic.************/uploads/091002/7VSo3Uoa7b.jpg[/IMG]
вот тут все что загружает процесс res
[IMG]http://pic.************/uploads/091002/aqzoUWA244.jpg[/IMG]
а тут то что загружается у меня

Старый 02.10.2009, 18:05
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Сорри, очевидно это "внутренний" репорт... просто почему-то JIRA мне показывает: Security Level:Public (All JIRA Users )...
Там говорится про оболочку для плеера в каталисте, но кто-то обмовливлся о том, что флешевый родной код не освобождал строку полученую извне... мне тяжело понять о чем именно речь т.как там используют какие-то юнит тесты, которых у меня нет, да и билдить каталист я все равно не могу...
Но даже если это так, то все равно помочь этому делу никак нельзя... ни из плеера ни из кода вне обертки...
__________________
Hell is the possibility of sanity

Старый 02.10.2009, 18:07
nick_van_rijn вне форума Посмотреть профиль Отправить личное сообщение для nick_van_rijn Найти все сообщения от nick_van_rijn
  № 9  
Ответить с цитированием
nick_van_rijn

Регистрация: Feb 2009
Сообщений: 33
я для вызова флэш функции использую CallFunction, и подписаное событие для получения ответа, такое взаимодействие везде описано как штатное,SetReturnValue не использовал.... везде AS3

Добавлено через 15 минут
Еще сомнения...ExternalInterface.addCallback для всех функций делаю в конце точки входа, все открываемые функции находятся ниже, не может быть чего плохого?

Старый 02.10.2009, 19:13
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 10  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Ну, списки не очень различаются, плеер-то один и тот же...
Цитата:
я для вызова флэш функции использую CallFunction, и подписаное событие для получения ответа, такое взаимодействие везде описано как штатное,SetReturnValue не использовал.... везде AS3
Не очень понял, вроде CallFunction синхронный.
Цитата:
Еще сомнения...ExternalInterface.addCallback для всех функций делаю в конце точки входа, все открываемые функции находятся ниже, не может быть чего плохого?
Тоже поясните, плиз. Не догоняю...что за точка входа, какие функции и почему они ниже?
На выходных попробую потерзать res.exe. Будет что-то интересное, отпишусь.

UPD:
Сделал пример с AS 3.0.
При старте имеем 17'560 Кб. Лики больше и чаще на SetReturnValue, FlashCall тоже течет, но процентов на 70% умереннее, на глаз. После нескольких сотен (350~400)вызовов вперемешку, но с перевесом на SetReturnValue, имеем ~20'250Кб. Однако, в какой-то момент расход скачкообразно уменьшается до ~18'500Кб и после этого лики идут вяло и в большинстве гасятся.
С AS 2.0 - роликом на старте имеем 16'480 Кб. Лики идут примерно вровень на обоих вызовах, на ~ 450 вызовах вперемешку расход догнал до ~17'100. Дальнейшие лики почему-то практически не происходят.

Исходник поправил так, что CallFunction возвращает результат, происходит это синхронно, так что про события, повторюсь, не понял.
Код:
HRESULT  CFlashEventDispatch::FlashCall (_bstr_t request)
{
	//::MessageBox(NULL,request,L"FlashCall request",0);
	static int i = 0;
	CString msg = "<string>SetReturnValue rules ";
	CString t;
	t.Format(L"%d",i);
	_bstr_t ret = _bstr_t(msg+t+" times!</string>");
	HRESULT hr = m_spPlayer->SetReturnValue(ret);
	i++;
    return S_OK;
}
...
LRESULT CFlashHost::OnRButtonDown(UINT /* uMsg */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& bHandled)
{
	static int i = 0;
	CString msg = "<invoke name=\"newfunc\" returntype=\"xml\"><arguments><string>FlashCall rules ";
	CString t;
	t.Format(L"%d",i);
	_bstr_t res = m_spPlayer->CallFunction(_bstr_t(msg+t+" times!</string></arguments></invoke>"));
	//::MessageBox(NULL,res,L"CallFunction response",0);
	i++;
    return 0;
}
Да, почему в вашем списке подгруженных модулей Flash.ocx присутствует дважды?

res3.zip (c AS 3.0) положил рядом с обновленным res.zip (с мессаджбоксами) на народе там же в pub. Плеер 10а.


Последний раз редактировалось alexcon314; 05.10.2009 в 08:40.
Создать новую тему Ответ Часовой пояс GMT +4, время: 20:00.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 20:00.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.