-Ïîèñê ïî äíåâíèêó

Ïîèñê ñîîáùåíèé â eugene20237

 -Ïîäïèñêà ïî e-mail

 

Ìàêðîñû äëÿ AS3

Äíåâíèê

Ïîíåäåëüíèê, 27 Àâãóñòà 2012 ã. 17:06 + â öèòàòíèê
À ÿ è íå çíàë ÷òî áûâàþò òàêèå øòóêè:
http://stackoverflow.com/questions/2527561/is-it-p...e-to-do-a-define-in-adobe-flex
È äàæå îòäåëüíûå ïðåïðîöåññîðû äëÿ AS3 åñòü. Î÷åíü èíòåðåñíî, ìîæíî âñå íàñòðîèòü è èñïîëüçîâàòü ìàêðîñû.
Äëÿ FlashBuilder: http://blog.joa-ebert.com/2006/02/27/actionscript3-preprocessor/
Äëÿ FlashDevelop: http://www.flashdevelop.org/community/viewtopic.php?f=5&t=1188
È âîîáùå èõ ìíîãî.
Òàêæå ìàêðîñû åñòü â apparat: http://code.google.com/p/apparat/wiki/MacroExpansion
Äëÿ âñòðàèâàíèÿ inline ôóíêöèé íàäî èñïîëüçîâàòü òóëçó tdsi, êîòîðàÿ åñòü çäåñü: http://makc.googlecode.com/svn/trunk/flash/fd_inline/tdsitest/
À åù¸ ìîæíî äåëàòü ìàêðîñû â AS3 ÷åðåç gpp (http://en.nothingisreal.com/wiki/GPP).
Âîò îí: http://makc.googlecode.com/svn/trunk/gpp.2.24-windows/
Âîò òåñòîâûé ïðîåêò ïîä FD ñ íèì: http://makc.googlecode.com/svn/trunk/flash/fd_inline/gpptest/

Ìåòêè:  

Ðàáîòà ñ ïàìÿòüþ íà ôëåøå

Äíåâíèê

×åòâåðã, 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.  ÷àñòíîñòè â íåé åñòü ññûëêà íà òàêîé ñïîñîá.


Ìåòêè:  

Ñèíãëåòîíû ñ âàéôàéåì

Äíåâíèê

Ñóááîòà, 06 Àâãóñòà 2011 ã. 04:16 + â öèòàòíèê
Òî ÷òî ñåé÷àñ áóäåò íàïèñàíî âîçìîæíî ïðîòèâîðå÷èò êàêèì-íèáóäü ïðèíöèïàì "ïðàâèëüíîãî" ïðîåêòèðîâàíèÿ ÏÎ, òàê ÷òî áóäüòå îñòîðîæíû ))

Ïðåäëàãàåìûé ïîäõîä ðîäèëñÿ â ìîåé ãîëîâå ÷òîáû óïðîñòèòü äîñòóï ê îáúåêòàì êëàññîâ âèäà "ñèíãëåòîí". Êòî íå â êóðñå, çíàéòå, ÷òî ýòî êëàññû ñ îáúåêòàìè â åäèíñòâåííîì ýêçåìïëÿðå è âðåìåíåì æèçíè ðàâíûì (èëè ïðèìåðíî ðàâíûì) âðåìåíè ðàáîòû ïðîãðàììû. Êëàññè÷åñêèé ïîäõîä ïðåäëàãàåò ïåðåäàâàòü èõ ïî öåïî÷êàì â âèäå ïàðàìåòðîâ è õðàíèòü â îáúåêòàõ-êëèåíòàõ ïîñðåäñòâîì àãðåãàöèè (â âèäå ññûëîê). Òàêîé ïîäõîä ïîõîæ íà ïðîêëàäûâàíèå ñåòåâûõ ïðîâîäîâ, ãäå óñòðîéñòâà âçàèìîäåéñòâóþò ëèøü ñ ñîñåäÿìè, ïðÿìî èëè êîñâåííî ñîåäèí¸ííûìè ïðîâîäàìè. Ïðîêëàäûâàòü ïðîâîäà èëè æå îáåñïå÷èâàòü êàæäûé ðàç ïåðåäà÷ó ñèíãëåòîíà ïî èåðàðõèè ãåìîðíî. Ïîýòîìó ïðåäëàãàåòñÿ óñòðîèòü íå÷òî ïîõîæåå íà wifi-ñåòè â ïðîåêòèðóåìîé îáúåêòíî-îðèåíòèðîâàííîé ñèñòåìå. Ñäåëàòü ñèíãëåòîíû äîñòóïíûìè âñåì, ïîñðåäñòâîì ñòàòè÷åñêîé ïåðåìåííîé (ìåòîäà) - ïî÷åìó áû è íåò?

Ïðåèìóùåñòâà çàêëþ÷àþòñÿ â òîì, ÷òî ïîëó÷èòü äîñòóï ê òàêîìó ñèíãëåòîíó ìîæíî èç ëþáîãî äðóãîãî êëàññà áåç âñÿêèõ ïàðàìåòðîâ. Íåäîñòàòîê çàêëþ÷àåòñÿ â îòñóòñòâèè êîíòðîëÿ çà ñîñòîÿíèåì ñèíãëåòîíà, ò.ê. òåïåðü êòî óãîäíî â ëþáîé ìîìåíò âðåìåíè ìîæåò åãî èçìåíèòü. ×òîáû èñïðàâèòü ýòîò íåäîñòàòîê, ìîæíî ðàçðåøèòü äîñòóï ê ñèíãëåòîíó òîëüêî òåì êëàññàì, äëÿ êîãî îí ïðåäíàçíà÷åí. Êàê æå ýòî ñäåëàòü?  ðàçíûõ ÿçûêàõ ìîãóò áûòü ñâîè ñðåäñòâà, íî âñåãäà ìîæíî ÿâíî ïðîïèñàòü â ñèíãëåòîíå íàçâàíèÿ êîíêðåòíûõ êëàññîâ, à ïîòîì ïðîâåðÿòü èõ â ìåòîäå ïîëó÷åíèÿ ñèíãëåòîíà. Ìîæíî òàêæå èçâðàòèòüñÿ è ñäåëàòü ÷òî-òî âðîäå ñèñòåìû ïàðîëåé â ñâîåé ïðîãðàììå, åñëè äðóãèõ ÿçûêîâûõ ñðåäñòâ íåò.

Âûãîäà îò ýòîãî ïîäõîäà îãðîìíà! Íåò ãåìîðó ñ ïàðàìåòðàìè è ññûëêàìè!
Ïîäðîáíîñòè îïèñàë â ýòîé ñòàòüå.

Ìåòêè:  

Òåñòû ïîèñêà ïî ñòðîêàì â AS3

Äíåâíèê

Ïÿòíèöà, 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() èñïîëüçîâàòü íå íàäî.

Ìåòêè:  

 Ñòðàíèöû: [1]