Çàïèñü ïîíðàâèëàñü
1
Ïðîöèòèðîâàëè
0
Ñîõðàíèëè
Ïîíåäåëüíèê, 27 Àâãóñòà 2012 ã. 17:06
+ â öèòàòíèê
Çàïèñü ïîíðàâèëàñü
0
Ïðîöèòèðîâàëè
0
Ñîõðàíèëè
<a href="https://www.liveinternet.ru/users/eugene20237/post231954305/">Работа � пам�тью на флеше</a><br/>Коротко резюмирую тут трюки по борьбе �о �борщиком му�ора виртуальной машина Flash Player. И�ледовани� проводили�ь только дл� вер�ии 11.1 standalone debugger for win32. В �ледующих вер�и�х Flash Player могли как улучшить работу � пам�тью так и ухудшить, но �корее в�его в�ё о�тало�ь также. Итак, garbage collector (GC) и�ключительно хреново работает � пам�тью. Он её попро�ту не очищает во многих �луча�х или выдел�ет в разы больше чем требует��.
Вы наверн�ка знаете, что такое �ильные и �лабые ��ылки и как GC их �читает чтобы пон�ть нужен �тот объект или нет... В�ё �то напи�ано во многих ме�тах... <a href="https://www.liveinternet.ru/users/eugene20237/post231954305/">Читать далее...</a>
×åòâåðã, 16 Àâãóñòà 2012 ã. 06:35
+ â öèòàòíèê
Êîðîòêî ðåçþìèðóþ òóò òðþêè ïî áîðüáå ñî ñáîðùèêîì ìóñîðà âèðòóàëüíîé ìàøèíà Flash Player. Èñëåäîâàíèÿ ïðîâîäèëèñü òîëüêî äëÿ âåðñèè 11.1 standalone debugger for win32.  ñëåäóþùèõ âåðñèÿõ Flash Player ìîãëè êàê óëó÷øèòü ðàáîòó ñ ïàìÿòüþ òàê è óõóäøèòü, íî ñêîðåå âñåãî âñ¸ îñòàëîñü òàêæå. Èòàê, garbage collector (GC) èñêëþ÷èòåëüíî õðåíîâî ðàáîòàåò ñ ïàìÿòüþ. Îí å¸ ïîïðîñòó íå î÷èùàåò âî ìíîãèõ ñëó÷àÿõ èëè âûäåëÿåò â ðàçû áîëüøå ÷åì òðåáóåòñÿ.
Âû íàâåðíÿêà çíàåòå, ÷òî òàêîå ñèëüíûå è ñëàáûå ññûëêè è êàê GC èõ ñ÷èòàåò ÷òîáû ïîíÿòü íóæåí ýòîò îáúåêò èëè íåò... Âñ¸ ýòî íàïèñàíî âî ìíîãèõ ìåñòàõ, â ò.÷. â äîêóìåíòàöèè ïî AS3. ß âñ¸ ýòî ïîâòîðÿòü íå áóäó. Çäåñü îïèñàíî êàê âñ¸ äîëæíî õîðîøî î÷èùàòüñÿ:
http://help.adobe.com/en_US/as3/mobile/flashplatform_optimizing_content.pdf
Íî íèôèãà îíî òàê íå ðàáîòàåò ê ñîæàëåíèþ. Ïðè ñîáëþäåíèè âñåõ ýòèõ ïðàâèë ìîÿ ïðîãðàììà âñ¸ ðàâíî æðàëà ïàìÿòü êàê ñóìàñøåäøàÿ ïðè çàãðóçêå, à ïîòîì Flash Player ïðîñòî ïàäàë, êîãäà êîí÷àëàñü ôèçè÷åñêàÿ ïàìÿòü â îïåðàöèîííîé ñèñòåìå. Âîò òàê îí ðàáîòàåò íà ñàìîì äåëå.
Âñ¸ íà÷àëîñü âîò ñ ýòîé òåìû â Juick:
http://juick.com/eugene20237@ya.ru/2009006 è ìîåãî âîïðîñà íà StackOverflow:
http://stackoverflow.com/questions/11833009/as3-bitmapdata-memory-leaks
Ïî÷èòàéòå, åñëè õîòèòå, óçíàåòå ìíîãî íîâîãî î ôëåøå. À åù¸ ïî÷èòàéòå âîò
ýòó ñòàòüþ î òîì ÷òî íàäî ðåàëüíî ñäåëàòü äëÿ îïòèìèçàöèè ïî ïàìÿòè íà ôëåøå.
Äàëüøå óæå îáíàðóæèëèñü äðóãèå èíòåðåñíûå îñîáåííîñòè. Ìîÿ îïòèìèçàöèÿ êàñàëàñü â îñíîâíîì âûäåëåíèÿ ïàìÿòè äëÿ ìíîæåñòâà êàðòèíîê, íà êîòîðûõ ó ìåíÿ ñòðîÿòñÿ êàäðû àíèìàöèè. Äàëåå ÿ ïðîñòî ðåçþìèðóþ âûâîäû, ê êîòîðûì ïðèøåë â õîäå ìíîãî÷àñîâûõ ýêñïåðèìåíòîâ ñ
BitmapData .
Loader â äåôîëòíîì ñâîåì ïðèìåíåíèè ïîðîæäàåò óòå÷êè ïàìÿòè. Ïîýòîìó åñëè ÷åðåç íåãî çàãðóæàåòñÿ êàðòèíêà, òî íàäî áðàòü å¸ BitmapData è äåëàòü bitmapData.clone(), ñîõðàíÿÿ â äðóãóþ ïåðåìåííóþ. À ïîòîì äèñïîçèòü ñóùåñòâóþùóþ êàðòèíêó â Loader, à çàòåì äåëàòü loader.unload(). Åù¸ íà âñÿêèé ñëó÷àé ìîæíî cacheAsBitmap=false.
PHP:
var bitmapData : BitmapData = ( loader . contentLoaderInfo . content as Bitmap ). bitmapData .clone();
( loader . content as Bitmap ). cacheAsBitmap = false ;
( loader . content as Bitmap ). bitmapData . dispose ();
( loader . content as Bitmap ). bitmapData = null ;
( loader . contentLoaderInfo . content as Bitmap ). bitmapData = null ;
loader . unload (); font>
Òîëüêî òîãäà îí ðàáîòàåò íîðìàëüíî. È òî ñ ó÷åòîì, ÷òî ïàìÿòü î÷èùàåòñÿ ñåêóíäîé ïîçäíåå. Íî î÷èùàåòñÿ. Âî âñåõ îñòàëüíûõ ñëó÷àÿõ ìîæíî ñóøèòü â¸ñëà... Ïðè ýòîì Loader îñòà¸òñÿ åäèíñòâåííûì ñïîñîáîì çàãðóæàòü êàðòèíêè áåç óòå÷åê ïàìÿòè.
C Embed ðåñóðñàìè âñ¸ ãîðàçäî õóæå. Ïîä íèõ âûäåëÿåòñÿ âñåãäà â ðàçû áîëüøå ïàìÿòè (â 2 ðàçà îáû÷íî) è äàëåå îíà íå î÷èùàåòñÿ íèêîãäà. Ïîýòîìó ïðîñòî òàê Embed ðåñóðñû èñïîëüçîâàòü íåëüçÿ. Ïðè÷èíà çàêëþ÷àåòñÿ â òîì, ÷òî îíè ïîñòðîåíû íà Flex-êîìïîíåíòàõ, à â íèõ ìíîãî íåîïòèìàëüíîé ôèãíè. Þçàéòå Loader. À åñëè íóæíî âñòðîèòü ðåñóðñ â ïðèëîæåíèå, òî äåëàéòå áèíàðíûé Embded, à çàòåì Loader.loadBytes(...). Äðóãîãî ïóòè ïîêà íå íàéäåíî.
PHP:
[ Embed ( source = "../media/128.png" , mimeType = "application/octet-stream" )]
static private const EmbedBMP :Class;
..............
loader . loadBytes (new EmbedBMP () as ByteArrayAsset ); font>
Èñïîëüçîâàòü ìíîãî ìåëêèõ êàðòèíîê - ïëîõàÿ èäåÿ. Ôëåø áóäåò âûäåëÿòü áîëüøå ïàìÿòè ÷åì òðåáóåòñÿ. Åñëè æå äëÿ áîëüøîé ãðóïïû êàðòèíîê (äîïóñòèì 100 øò.) âûçûâàåòñÿ dispose(), òî èõ ïàìÿòü áóäåò î÷èùåíà, íî íå ñðàçó, à êàê ïîâåçåò: ìîæåò ÷åðåç ìèíóòó èëè êàê óãîäíî Áîãó Ìóñîðùèêó. Åñëè æå èñïîëüçîâàòü äåñÿòîê áîëüøèõ êàðòèíîê (äîïóñòèì 4096x4096), òî ïàìÿòü ïîä íèõ áóäåò âûäåëÿòü è î÷èùàòüñÿ àáñîëþòíî êîððåêòíî è ñðàçó æå.
Âûäåëåíèå ïàìÿòè ïîä BitmapData ïðîèñõîäèò íå ïðè ñîçäàíèè îáúåêòà BitmapData, à ïðè ïåðâîé îïåðàöèè ðèñîâàíèÿ íà íåé èëè êîïèðîâàíèÿ äàííûõ ïèêñåëåé â íå¸. Ýòî âíóòðåííÿÿ îïòèìèçàöèÿ BitmapData.
Ãîâîðÿò, ÷òî BitmapData èíîãäà âûäåëÿåò ïàìÿòè áîëüøå ÷åì íàäî èç-çà âíóòðåííåãî ìèïìåïïèíãà. Ýòîò ìèïìåïïèíã îòêëþ÷èòü íèêàê íåëüçÿ. Òàêæå åñòü èíôîðìàöèÿ, ÷òî îí îòêëþ÷àåòñÿ, åñëè çàäàòü ðàçìåðû êàðòèíêè íå ÿâëÿþùèåñÿ ñòåïåíüþ äâîéêè. Ó ìåíÿ íà ïðàêòèêå ýòî ñîâñåì íå ïîäòâåðäèëîñü, òàê ÷òî íèêàêîé âîçìîæíîñòè óïðàâëåíèÿ ìèïìåïïèíãîì ñêîðåå âñåãî óæå íåò.
Ñþäà æå ïîäåëþñü îïûòîì èñïîëüçîâàíèÿ òðþêà ñ local connection . Òàê âîò, â èñõîäíîì âàðèàíòå ýòîãî õàêà LocalConnection ñîçäà¸òñÿ äâà ðàçà âíóòðè try. Ìîè ýêñïåðèìåíòû ïîêàçàëè, ÷òî íàäî âïèñàòü òàì òðè ñòðî÷êè, à íå äâå. Âîò òàê:
PHP:
public static function freeMemoryGC (): void
{
// the GC will perform a full mark/sweep on the second call.
try
{
new LocalConnection (). connect ( 'foo' );
new LocalConnection (). connect ( 'foo' );
new LocalConnection (). connect ( 'foo' );
}
catch ( e :*)
{
}
//System.gc();
} font>
 ýòîì ñëó÷àå âåðîÿòíîñòü î÷èñòêè ïàìÿòè ñðàçó ãîðàçäî âûøå (ïî÷òè âñåãäà ñðàçó î÷èùàåòñÿ). Åñëè ñäåëàòü äâà ðàçà ýòó èíñòðóêöèþ, íî âûçâàòü òîæå ñàìîå õîòÿ áû ÷åðåç 100 ìñ, òî ïàìÿòü òàêæå î÷èñòèòüñÿ. System.gc() íå èñïîëüçóþ ïîòîìó ÷òî îí ðàáîòàåò òîëüêî AIR èëè òîëüêî â îòëàäî÷íîé âåðñèè Flash Player. Êðîìå òîãî ñîâåòóþ ïî÷èòàòü ýòó òåìó î ñïîñîáàõ ïðèíóäèòåëüíîãî ïèíàíèÿ GC .  ÷àñòíîñòè â íåé åñòü ññûëêà íà òàêîé ñïîñîá .
Çàïèñü ïîíðàâèëàñü
0
Ïðîöèòèðîâàëè
1
Ñîõðàíèëè
<a href="https://www.liveinternet.ru/users/eugene20237/post178912547/">Синглетоны � вайфайем</a><br/>То что �ейча� будет напи�ано возможно противоречит каким-нибудь принципам "правильного" проектировани� ПО, так что будьте о�торожны ))
Предлагаемый подход родил�� в моей голове чтобы упро�тить до�туп к объектам кла��ов вида "�инглетон". Кто не в кур�е, знайте, что �то кла��ы � объектами в един�твенном �кземпл�ре и временем жизни равным (или примерно равным) времени работы программы. Кла��иче�кий подход предлагает передавать их по цепочкам в виде параметров и хранить в объектах-клиентах по�ред�твом агрегации (в виде ��ылок). Такой подход похож на прокладывание �етевых проводов, где у�трой�тв... <a href="https://www.liveinternet.ru/users/eugene20237/post178912547/">Читать далее...</a>
Ñóááîòà, 06 Àâãóñòà 2011 ã. 04:16
+ â öèòàòíèê
Òî ÷òî ñåé÷àñ áóäåò íàïèñàíî âîçìîæíî ïðîòèâîðå÷èò êàêèì-íèáóäü ïðèíöèïàì "ïðàâèëüíîãî" ïðîåêòèðîâàíèÿ ÏÎ, òàê ÷òî áóäüòå îñòîðîæíû ))
Ïðåäëàãàåìûé ïîäõîä ðîäèëñÿ â ìîåé ãîëîâå ÷òîáû óïðîñòèòü äîñòóï ê îáúåêòàì êëàññîâ âèäà "ñèíãëåòîí". Êòî íå â êóðñå, çíàéòå, ÷òî ýòî êëàññû ñ îáúåêòàìè â åäèíñòâåííîì ýêçåìïëÿðå è âðåìåíåì æèçíè ðàâíûì (èëè ïðèìåðíî ðàâíûì) âðåìåíè ðàáîòû ïðîãðàììû. Êëàññè÷åñêèé ïîäõîä ïðåäëàãàåò ïåðåäàâàòü èõ ïî öåïî÷êàì â âèäå ïàðàìåòðîâ è õðàíèòü â îáúåêòàõ-êëèåíòàõ ïîñðåäñòâîì àãðåãàöèè (â âèäå ññûëîê). Òàêîé ïîäõîä ïîõîæ íà ïðîêëàäûâàíèå ñåòåâûõ ïðîâîäîâ, ãäå óñòðîéñòâà âçàèìîäåéñòâóþò ëèøü ñ ñîñåäÿìè, ïðÿìî èëè êîñâåííî ñîåäèí¸ííûìè ïðîâîäàìè. Ïðîêëàäûâàòü ïðîâîäà èëè æå îáåñïå÷èâàòü êàæäûé ðàç ïåðåäà÷ó ñèíãëåòîíà ïî èåðàðõèè ãåìîðíî. Ïîýòîìó ïðåäëàãàåòñÿ óñòðîèòü íå÷òî ïîõîæåå íà wifi-ñåòè â ïðîåêòèðóåìîé îáúåêòíî-îðèåíòèðîâàííîé ñèñòåìå. Ñäåëàòü ñèíãëåòîíû äîñòóïíûìè âñåì, ïîñðåäñòâîì ñòàòè÷åñêîé ïåðåìåííîé (ìåòîäà) - ïî÷åìó áû è íåò?
Ïðåèìóùåñòâà çàêëþ÷àþòñÿ â òîì, ÷òî ïîëó÷èòü äîñòóï ê òàêîìó ñèíãëåòîíó ìîæíî èç ëþáîãî äðóãîãî êëàññà áåç âñÿêèõ ïàðàìåòðîâ. Íåäîñòàòîê çàêëþ÷àåòñÿ â îòñóòñòâèè êîíòðîëÿ çà ñîñòîÿíèåì ñèíãëåòîíà, ò.ê. òåïåðü êòî óãîäíî â ëþáîé ìîìåíò âðåìåíè ìîæåò åãî èçìåíèòü. ×òîáû èñïðàâèòü ýòîò íåäîñòàòîê, ìîæíî ðàçðåøèòü äîñòóï ê ñèíãëåòîíó òîëüêî òåì êëàññàì, äëÿ êîãî îí ïðåäíàçíà÷åí. Êàê æå ýòî ñäåëàòü?  ðàçíûõ ÿçûêàõ ìîãóò áûòü ñâîè ñðåäñòâà, íî âñåãäà ìîæíî ÿâíî ïðîïèñàòü â ñèíãëåòîíå íàçâàíèÿ êîíêðåòíûõ êëàññîâ, à ïîòîì ïðîâåðÿòü èõ â ìåòîäå ïîëó÷åíèÿ ñèíãëåòîíà. Ìîæíî òàêæå èçâðàòèòüñÿ è ñäåëàòü ÷òî-òî âðîäå ñèñòåìû ïàðîëåé â ñâîåé ïðîãðàììå, åñëè äðóãèõ ÿçûêîâûõ ñðåäñòâ íåò.
Âûãîäà îò ýòîãî ïîäõîäà îãðîìíà! Íåò ãåìîðó ñ ïàðàìåòðàìè è ññûëêàìè!
Ïîäðîáíîñòè îïèñàë
â ýòîé ñòàòüå .
Çàïèñü ïîíðàâèëàñü
0
Ïðîöèòèðîâàëè
0
Ñîõðàíèëè
<a href="https://www.liveinternet.ru/users/eugene20237/post178910245/">Те�ты пои�ка по �трокам в AS3</a><br/>Провёл �ейча� любопытные те�ты пои�ка по �троковому набору из 10 ты�. �л-тов:
DICTIONARY[]: 155 ms
ARRAY[]: 196 ms
ArrayList::getItemIndex(): 19839 ms
VECTOR::indexOf(): 9923 ms
Дл� 100 ты�. �л-тов:
DICTIONARY[]: 1579 ms
ARRAY[]: 1473 ms
OBJECT[]: 1539 ms
OBJECT::hasOwnProperty(): 2029 ms
Вывод: не надо даже пытать�� и�пользовать indexOf(), т.к. он ищет без хеш-таблицы. ArrayList вообще в топку. Dictionary, Array и Object аб�олютно идентичны. hasOwnProperty() и�пользовать не надо.... <a href="https://www.liveinternet.ru/users/eugene20237/post178910245/">Читать далее...</a>
Ïÿòíèöà, 05 Àâãóñòà 2011 ã. 02:56
+ â öèòàòíèê
Ïðîâ¸ë ñåé÷àñ ëþáîïûòíûå òåñòû ïîèñêà ïî ñòðîêîâîìó íàáîðó èç 10 òûñ. ýë-òîâ:
DICTIONARY[]: 155 ms
ARRAY[]: 196 ms
ArrayList::getItemIndex(): 19839 ms
VECTOR::indexOf(): 9923 ms
Äëÿ 100 òûñ. ýë-òîâ:
DICTIONARY[]: 1579 ms
ARRAY[]: 1473 ms
OBJECT[]: 1539 ms
OBJECT::hasOwnProperty(): 2029 ms
Âûâîä: íå íàäî äàæå ïûòàòüñÿ èñïîëüçîâàòü indexOf(), ò.ê. îí èùåò áåç õåø-òàáëèöû. ArrayList âîîáùå â òîïêó. Dictionary, Array è Object àáñîëþòíî èäåíòè÷íû. hasOwnProperty() èñïîëüçîâàòü íå íàäî.