Hou je geheugen het zwembad

stabiel, hou je flash project geheugen stabiele objecten in het zwembad,,,,,,,,,,,, 35 - eenheid,,,,,,, de delen van het netwerk, maandag wat in tuts + koers zal dalen tot slechts 3 dollar.Niet' niet missen, van het gebruik van het geheugen. Dat is een aspect van ontwikkeling, je moet echt voorzichtig zijn, anders kan het vertraagt je aanvraag, neemt een groot deel van het geheugen en zelfs de ineenstorting van alles.Deze gids zal u helpen te voorkomen dat deze slechte resultaten potentieel., laten we eens kijken naar de laatste resultaten, en wij zullen proberen: het creëren van een vuurwerk effect, in de arena van overal, en om een oogje te houden op de herinnering profiler in de linkse hoek, 1: de invoering van, als je ooit een analyse van het gebruik van de instrumenten of het gebruik van Een Code of een bibliotheek, je kan zijn merkt op dat veel geheugen omhoog, en dan weer naar beneden als je niet, je code is eersteklas.Oké, maar als gevolg van het gebruik van deze grote herinnering piek ziet er een beetje Cool, dat je je de toepassing of de gebruikers geen goed nieuws.Lezen en begrijpen waarom dit gebeurt, en hoe het te vermijden. Stap 2: goed en verkeerd gebruik van de foto 's, de volgende is een goed voorbeeld van het geheugen, niet goed.Dit is het prototype van een spel.Je moet twee belangrijke dingen: een groot deel van het geheugen, het hoogtepunt van het geheugen gebruikt.540mb piek is bijna op.Dit betekent dat dit een prototype van de computer tot de gebruikers van de RAM 540mb, dit is je moet vermijden.,, de problemen beginnen, als je het in je aanvraag voor het creëren van veel object.Ongebruikte geval zal gebruik blijven maken van de toepassing van je geheugen tot de vuilnisman die, als ze vrijkomen als gevolg van de grote oren.Een slechtere situatie voordoet, de situatie niet worden vrijgelaten, uw aanvraag geheugen gebruiken blijven groeien tot ineenstorting of breuk.Als u meer wilt weten over een probleem, en hoe het te vermijden, lees deze snelle tips over de terugwinning van afval, in deze handleiding zullen wij geen oplossing voor alle problemen van de vuilnisman.We zullen doen en het behoud van de structuur van het object in het geheugen, om gebruik te maken van de volledige stabiliteit, zodat de vuilnisman van het geheugen opfrissen, waardoor de toepassing van de procedure sneller.Kijk naar de Top van de zelfde prototype geheugen gebruiken, maar deze keer een optimalisering van de technische hier weergegeven: al deze verbeteringen kan worden bereikt met behulp van het voorwerp van het zwembad.Lezen en begrijpen wat het is, hoe het werkt, stap 3: het zwembad, de aard van de objecten in het zwembad is een techniek waarbij een vooraf bepaalde objecten worden gecreëerd, de aanvraag worden gestart en toepassingen in de handhaving van de levenscyclus in het geheugen.Wanneer de toepassing van die voorwerpen objecten in het zwembad en het voorwerp van het verzoek, de in de oorspronkelijke staat wanneer de aanvraag gebruiken.Er zijn veel soorten objecten in het zwembad, maar we hoeven alleen maar te kijken naar de: statische en dynamische objecten in het zwembad, het creëren van een definitie van de statische voorwerpen zwembad aantal voorwerpen en toepassingen in de levenscyclus van voorwerpen.Als een voorwerp wordt gevraagd, maar het zwembad heeft alle voorwerpen, zwembad terug van nul.Het gebruik van dit zwembad wanneer dat nodig is, bijvoorbeeld het doel van het verzoek en krijg niets terug, dynamische objecten in het zwembad ook heeft geleid tot een aantal omschreven doel, maar als een object worden gevraagd en de tank leeg is, een ander voorbeeld van het zwembad een automatische en terug tegen de verhoging van de omvang van Het zwembad, en de toevoeging van nieuwe onderwerpen, in deze handleiding zullen wij de oprichting van een eenvoudige toepassing als gebruiker op het scherm zien.Deze deeltjes hebben een beperkte levensduur, en dan zal het van het scherm te schrappen, en terug naar het zwembad.Om dit te bereiken, zullen we eerst het opzetten van deze aanvraag is geen object zwembad en controleren van het gebruik van het geheugen, en vergeleken met de uitvoering van het voorwerp van het zwembad en geheugen voor het gebruik van stap 4:.,, voorlopige toepassing, open de FlashDevelop (zie de gids) en het creëren van Een nieuwe 3 - project.We gebruiken gewoon een klein vierkant als de beelden, dat zal worden opgesteld op basis van de code, en vanuit het oogpunt van een willekeurig.Het creëren van een nieuwe klasse, bekend als de uitbreiding van de elfen.Ik zal aannemen dat je niet kunt omgaan met een deeltje te creëren, en slechts wijzen op de aspecten van de levensduur, zal volgen en op het scherm.Kun je de les van de integriteit van de source code, op de Top van de website als u problemen heeft met die deeltjes, particuliere var _lifetime:int; de openbare functie bijgewerkt: (eenheden): ///////mobiele X van de nietigverklaring {+ = wiskunde. Omdat de * * * * * * * * * * * * * * (_angle) _speed tijd /1000; y + = misdaad (wiskunde. * * * * * * * * * * * * * * _angle) _speed tijd /1000; ///////kleine versoepeling die beweging lijkt _speed = 120 * /1000; ///////zorgen voor leven en verwijdering van _lifetime = de tijd; als (_lifetime < = 0) {moeder. Removechild (de);}}, de code is verantwoordelijk voor de verwijdering van deeltjes van het scherm de code.We hebben een variabele, _lifetime, met inbegrip van de deeltjes op het scherm in seconden.In de fabrikant, zullen wij de waarden voor 1000 gestart.De functie van de, update (), bekend als elk frame en ontvangen, door het frame voor frame aantal milliseconden, waardoor de waarde van de levenscyclus.Als deze waarde tot nul of minder, de eisen van de vader van het automatisch verwijderd van het scherm.De rest van de code zijn de mobiele, zullen wij nu in een klik met de muis bij het creëren van een van deze worden gecreëerd voor een hoop.Naar de belangrijkste particuliere var.: _oldtime: eenheid; particuliere var _elapsed: eenheid; de particuliere ondernemers (E functie: gebeurtenissen = nul): ongeldig {removeEventListener (event.added_to_stage ervan); ///////de inleidende fase. AddEventListener (mouseevent.click, createparticles); addEventListener (event.enter_frame, updateparticles); _oldtime = gettimer (particuliere);} de functie van updateparticles (E: gebeurtenissen): ongeldig {_elapsed = gettimer () - _oldtime; _oldtime + = _elapsed; (var i:int = 0; ik < numchildren; I + +) {als (getchildat (i) is de) {deeltjes (getchildat (i) vernieuwing (_elapsed);}}.} privé functie createparticles (E:MouseEvent): ongeldig {(var i:int = 0; ik < 10; I + +) (addchild (nieuwe deeltjes (stage.mousex, fase.Als een muis);}}), vernieuwing van de code is u bekend: dit is een eenvoudige op basis van de gemeenschappelijke wortels van de tijd cyclus, de spelletjes.Vergeet niet, flash.events.event verklaringen: invoer flash.events.mouseevent; de invoer van Flash. Utils. GetTimer;, je kunt nu test je aanvraag en het gebruik van FlashDevelop ingebouwde - profiel.Klik op het scherm een hoop tijd.Dit is mijn geheugen. Ik gebruik: klik op de vuilnisman begint te rennen.Aanvraag voor het creëren van meer dan 2.000 deeltjes verzamelen.Het begint erop te lijken dat de herinnering van het prototype?Het lijkt, dat is absoluut niet goed.Om de analyse te vergemakkelijken, zullen we de eerste stap in de richting van de praktische procedures voor bedoelde.De code hier nog in de belangrijkste particuliere ondernemers,.: functie (E: gebeurtenissen = nul): ongeldig {removeEventListener (event.added_to_stage ervan); ///////de inleidende fase. AddEventListener (mouseevent.click, createparticles); addEventListener (event.enter_frame, updateparticles addchild (); de nieuwe statistieken ()); _oldtime = gettimer ();}, niet vergeet de invoer, net.hires.debug.stats en klaar voor gebruik.Stap 5:,, de definitie van een poolable tegen de toepassing van een vierde stap is heel eenvoudig.Het verschijnt alleen een eenvoudig van de effecten, maar in de herinnering heeft veel problemen.In deze fase zullen wij beginnen te werken aan een object te bundelen, om dit probleem op te lossen, onze eerste stap voor een goede oplossing is rekening te houden met de objecten kunnen verzamelen, is er geen probleem.Een object in het zwembad in, en we moeten ervoor zorgen dat die gericht zijn op het creëren van voorwerpen worden gebruikt, en het voorwerp terug is volledig van toepassing in de andere delen van het programma gescheiden "(dat wil zeggen niet met andere dingen.Met het oog op de verplichte elk object dat kan doen, creëren we een interface.Deze interface omschreven voorwerpen moeten twee belangrijke functie:,,, vernietigen... () ().Dus, we kunnen op deze wijze, zonder zich zorgen te maken over of het voorwerp heeft ze (omdat er).Dit betekent ook dat wij willen elk voorwerp moet beseffen dat deze interface.Dus dit is de gemeenschappelijke interface, pakje {ipoolable {functie worden vernietigd (): Bull. Functie:... () (): functie niet vernietigen, nietig te verklaren;}}, omdat we de deeltjes worden poolable, we moeten laten zien dat ze de verwezenlijking van ipoolable,,.We hebben alle codes van de fabrikant),... (,, en de afschaffing van elke externe verwijzingen, vernietigen (). Functie.Hier is wat het eruit moet zien:, ipoolable * /openbare functies /interface worden vernietigd (): booleaanse {terug _destroyed;} {zoals openbare functie:... () nietig verklaard._destroyed) {terugkeer;} _destroyed = vals; grafische. Beginfill (een (wiskunde. (*) 0xffffff), 0,5 + (wiskunde. () × 0,5); grafische. DrawRect (1,5 1,5 en 3, 3); grafische. Endfill (); _angle = wiskunde. () math.pi * * * * * * * * 2. De _speed = 150; //////////////pixels per seconde _lifetime = 1000; een openbare functie (}):void vernietigen als (_destroyed) {terugkeer;} _destroyed = waar; grafische. Duidelijk (');}, ook een debat over de fabrikant niet meer nodig.Als je wil geen informatie doorgeven aan de voorwerpen, moet je door de functies van het nu te doen.Omdat,... (), de werking van het project, nu, we moeten nog steeds die, _destroyed, echt, in de fabrikant kan rennen, functies, zodat we ons net aan, deeltjes, gedragen als een soort, ipoolable,.Dit bezwaar zwembad kan het creëren van een deeltje, zwembad, stap 6: start van voorwerpen, zwembad, nu is het creëren van een flexibel voorwerp een zwembad in het zwembad, kan het, wanneer we maar willen.Deze groep zal worden gebruikt als een fabriek, in plaats van gebruik te maken van de nieuwe, voor het creëren van een object van trefwoorden, kun je in het zwembad, bellen we een methode, terug naar ons doel.Zo kunnen we in onze code overal toegang.In de eerste plaats het creëren van een nieuwe klasse van "ObjectPool" toe te voegen en de code om de zoon van de klas, pakje {: ObjectPool {particuliere statische var _instance:ObjectPool; particuliere statische var _allowinstantiation: Bull. De statische functie om de aanleg ObjectPool {zoals: (()._instance) {_allowinstantiation = waar; _instance = nieuwe objectpool () _allowinstantiation = vals;}, terug naar _instance; openbare functies () {} objectpool als (._allowinstantiation) {gooi nieuwe fouten ("de concretisering van een enkele gevallen proberen!");}}}}, variabelen, _allowinstantiation, dit kind is de kern van de uitvoering van de: het is privé, dus alleen kunnen worden gewijzigd, en de enige plek gewijzigd moet worden, is in het creëren van het in eerste aanleg, nu moeten we beslissen hoe het behoud van het zwembad.Want het is de globale (dat wil zeggen in je aanvraag kan een voorwerp in het zwembad), moeten we een manier vinden, er is altijd een unieke naam voor elke tank.Wat te doen?Veel van de beste, maar ik vond dat tot nu toe is het gebruik van voorwerp "eigen naam de naam als het zwembad.Zo kunnen wij een "de" pool "vijanden", een zwembad, enz...Maar er is nog een ander probleem.De naam van de soort alleen in hun pakket is uniek, zoals een klasse "baseobject" in de "vijand" pakket ", en baseobject" in de "structuur" - pakket zal worden toegestaan.Het probleem met behulp van de klas in het zwembad, het concept van de identificatiecode voor zwembad is nog steeds groot, dat is waar, getqualifiedclassname () flash. Instrumenten, om ons te helpen.Eigenlijk, zou leiden tot een reeks van deze functie, met inbegrip van een pakket.Dus nu kunnen we het gebruik van de naam van de soort van elk voorwerp gedefinieerd als hun zwembad identificatiecode.Dit is zullen wij in de volgende stap in de procedure toe te voegen, 7: het creëren van een zwembad, en nu hebben we een identificatie van de methode voor het zwembad, het is tijd om ze aan de code.Ons doel moet zijn het zwembad voldoende flexibiliteit ter ondersteuning van de statische en dynamische zwembad in stap 3 in onze discussie over deze, weet je nog?We moeten ook kunnen worden opgeslagen, elke tank en de omvang van elke in het zwembad in, hoeveel activiteiten betreft.Een goede oplossing, al deze informatie is het creëren van een privé - les - en in de winkel, alle voorwerpen, zwembad, pakje {klas: ObjectPool {particuliere statische var _instance:ObjectPool; particuliere statische var _allowinstantiation: Bull. _pools: particuliere var; de statische functie () ObjectPool (zoals bijvoorbeeld:!_instance) {_allowinstantiation = waar; _instance = nieuwe objectpool () _allowinstantiation = vals;}, terug naar _instance; openbare functies () {} objectpool als (._allowinstantiation) {gooi nieuwe fouten ("de concretisering van een enkele gevallen proberen!")_pools;} = {}}}} {categorie; poolinfo van de variabele project: luchtvaartmaatschappij. < ipoolable > de variabelen ItemClass: klasse van de variabele omvang; eenheid; de variabelen: actieve: eenheid; de variabele is dynamisch: Bull. Poolinfo (ItemClass: openbare functie, afmetingen: eenheid, dynamische: booleaanse = waar) {this.itemclass = ItemClass; project = nieuwe luchtvaartmaatschappij. < ipoolable > (grootte,!Is de dynamische); this.size = grootte; this.isdynamic = dynamische; actieve = 0;} de - (); de particuliere functie de - ():void {(var i:int = 0; ik < afmetingen; I + +) (project [M] = nieuwe itemclass ();}}}, meer dan de code tot privé - lessen alle informatie over het zwembad zal bevatten.We hebben alle voorwerpen, _pools, het voorwerp van het zwembad.De volgende functies in het register, creëren we een zwembad, een openbare functie, registerpool (klasse: soort, omvang: eenheid = 1, is een dynamisch: booleaanse = waar): ongeldig {als.(voor de (objectClass). De fabriek. Implementsinterface. (@ - = = "ipoolable"). De lengte () > 0)) {gooi nieuwe fouten ("kan niet verbergen wat de niet - uitvoering van ipoolable!")Qualifiedname; terug;} var: touw getqualifiedclassname (objectClass); als (!_pools [qualifiedname]) {_pools [qualifiedname] = nieuwe poolinfo (objectClass, de omvang van zijn dynamische);}}, deze code is een beetje lastig, maar probeer niet in paniek te raken.Hier is uitgelegd.Ten eerste, als verklaring lijkt echt heel vreemd.Je kan nooit de functie, dus hier is de describetype ():,, de functie van het creëren van een XML - bevat alle informatie over het doel, en we hebben het, in een soort situatie, die al zijn opgenomen in de in de etikettering, de fabriek,,, XML - beschrijving van alle met de Uitvoering van implementsinterface,, interface tussen klasse, Mark. En we doen een snelle zoektocht te zien, ipoolable interface is één van hen.Als dat zo is, dan weten we dat we dit soort zwembad, omdat we met succes zal worden als een doelstelling,,,, dat na de oprichting van een vermelding van de code in, _pools, als nog niet bestond.Na poolinfo constructeurs,,, de - (), in deze functie, daadwerkelijk tot we wat grootte van het zwembad.Nu al klaar voor.Stap in, 8: het verkrijgen van een object, in de laatste stap is, kunnen we de oprichting van een register van de functie van het zwembad, maar nu hebben we een object te gebruiken.Het is heel eenvoudig: als de tank is leeg. We hebben een doel, en het terug brengen.Als de tank leeg is, we controleren of het dynamisch zijn, als dat zo is, zullen wij een verhoging van haar omvang en het creëren van een nieuwe objecten en het terug brengen.Als niet, we komen leeg terug.Je kan kiezen uit een fout, maar alleen om je terug van nul en de code op dit gebeurt.), hier, getobj (). Functie: openbare functie, getobj (klasse: categorie): ipoolable {VAR qualifiedname: string getqualifiedclassname (objectClass); als (!_pools [qualifiedname]) {gooi nieuwe fouten ("kan een voorwerp van een zwembad niet geregistreerd!")En terug;} var returnobj:ipoolable; als (poolinfo (_pools [qualifiedname]). De actieve = = poolinfo (_pools [qualifiedname]). De grootte) {als (poolinfo (_pools [qualifiedname]). Een dynamische) {returnobj = nieuwe objectclass (); poolinfo (_pools [qualifiedname]). De omvang van + + (_pools; poolinfo [qualifiedname]). De projecten. - (returnobj);} {}} anders terug van nul; of (returnobj = poolinfo (_pools [qualifiedname]). De projecten [poolinfo (_pools [qualifiedname]). De activiteiten]; returnobj. Geen ();} poolinfo (_pools [qualifiedname]). Actieve + +; terug naar returnobj;}, in functie van het zwembad, we controleren of het echt bestaat.Als voorwaarde is voldaan, we controleren de tank is leeg. Als dynamisch zijn, creëren we een nieuwe objecten en toegevoegd aan het zwembad.Als de tank niet dynamisch, stoppen we de code, maar terug naar de lucht.Als een zwembad en een object, krijgen we het dichtst bij het zwembad en de telefoon, het voorwerp van het begin... ().Dit is heel belangrijk: de reden waarom we dat... (), een voorwerp is al in het zwembad is ervoor te zorgen dat het object in de "beschikbaar" staat, misschien wil je: waarom wil je niet met de inspectie is kalm, describetype (), deze functie?Het antwoord is simpel, describetype (), het creëren van een XML -, elke dag, noemen we het een tijd, dus het is erg belangrijk om te voorkomen dat voorwerpen, met veel geheugen, die we niet kunnen controleren.Bovendien, kijk of er echt alleen is niet genoeg: als door de niet - uitvoering van ipoolable zwembad,,, en dat betekent dat we zelfs niet het creëren van een zwembad.Als er geen sprake is van een zwembad, dan zullen we dat in ons, als aan het begin van de functie, dan kunnen we aan ons, de belangrijkste, en het doel van het zwembad.Controleer de: particuliere - functie, E: gebeurtenissen = nul): ongeldig {removeEventListener (event.added_to_stage ervan); ///////de inleidende fase. AddEventListener (mouseevent.click, createparticles); addEventListener (event.enter_frame, updateparticles); _oldtime = gettimer (); ObjectPool. Voorbeelden van. Registerpool (deeltjes, 200, Waar); particuliere functie} createparticles (E:MouseEvent): ongeldig {VAR tempparticle: deeltjes; (var i:int = 0; ik < 10; I + +) (tempparticle = ObjectPool. Voorbeelden van deeltjes. Getobj (deeltjes); tempparticle. X = e.stagex; tempparticle. Y = e.stagey addchild (tempparticle);}}, te verzamelen en profielen het gebruik van de herinnering.Dit is wat ik krijg: dit is gaaf, niet?Stap 9: object, terug naar het zwembad, we zijn erin geslaagd om een object te bundelen, dat geeft ons doel.Dat is geweldig.Maar het is nog niet voorbij.We krijgen nog steeds alleen maar om nooit meer terug te keren naar hun object, als we ze niet meer nodig.De toevoeging van een functie van de tijd van de voorwerpen terug binnen, ObjectPool,: openbare functies (doelstellingen, returnobj: ipoolable): ongeldig {VAR qualifiedname: string getqualifiedclassname (DST); als (!_pools [qualifiedname]) {gooi nieuwe fouten ("niet de terugkeer van een object uit het zwembad niet geregistreerd!")Terug naar objindex:int = var;}; poolinfo (_pools [qualifiedname]). De projecten. (DST); als (objindex > = 0) {als.Poolinfo (_pools [qualifiedname]). Is de dynamische) {poolinfo (_pools [qualifiedname]). Items.fixed = vals;} poolinfo (_pools [qualifiedname]). De projecten. Aansluiting (objindex, 1); dst. Vernietigen (); poolinfo (_pools [qualifiedname]). De projecten. Duw (Dst); als (!Poolinfo (_pools [qualifiedname]). Is de dynamische) {poolinfo (_pools [qualifiedname]). Items.fixed = waar;} poolinfo (_pools [qualifiedname]). De actieve;}}, laten we door middel van de functie: in de eerste plaats moet worden onderzocht, of het voorwerp heeft een zwembad.Je bent gewend om deze code - het enige verschil is dat we nu met een voorwerp in plaats van een klasse van de naam in aanmerking komen, maar dat verandert niets aan de produktie).Als het niet in het zwembad in, we hebben het te negeren.Als we dat het doel is in het zwembad, we moeten breken met het object is op dit moment het zwembad en de invoeging van voorwerpen op het eind.Waarom?Omdat we het zwembad tellen van de materialen die worden gebruikt, moeten we opnieuw onze zwembad zodat alle terug en de niet gebruikte voorwerpen op het einde.Dit is wat we in deze functie heeft gedaan, voor de statische voorwerpen, zwembad, creëren we een vaste lengte, met een vaste lengte van voorwerpen.Dus, kunnen we niet, het splice (), op de (), voorwerp terug.Dit is de oplossing, veranderingen, vastgesteld, waarin de vervoerder de aard, valse, het schrappen van het voorwerp, de toevoeging van, tot het einde, dan verandert het eigendom terug, echt waar.We moeten ook de vermindering van het aantal activiteiten betreft.Na voltooiing van de terugkeer van ons. We hebben de code weer een doel, en we kunnen de deeltjes, laten we terug naar het zwembad, zodra ze aan hun einde van het leven.De deeltjes in de openbare functie:,,, vernieuwing: (eenheden): ///////mobiele X van de nietigverklaring {+ = wiskunde. Omdat de * * * * * * * * * * * * * * (_angle) _speed tijd /1000; y + = wiskunde. Misdaad (_angle) * * * * * * * * * * * * * * _speed tijd /1000; ///////kleine versoepeling beweging lijkt _speed = 120 * * * * * * * tijd /1000; ///////zorgen voor leven en verwijdering van _lifetime = de tijd; Als (_lifetime < = 0) {moeder. Removechild (de); ObjectPool. Voorbeelden van. Returnobj (de);}}, let op, we hebben een telefoon, zoals ObjectPool. Returnobj (), daar.Dit is wat het voorwerp terug naar het zwembad.Nu kunnen we het testen en de configuratie van onze aanvragen:, en we gaan.Stabiliteit in herinnering, zelfs honderden hits.Je weet nu hoe, de conclusies van het creëren en gebruiken van een object te bundelen, om uw aanvraag geheugen gebruiken.We kunnen een soort overal gebruiken, het is heel eenvoudig, om zich aan te passen aan de code van je, in je aanvraag begin, het creëren van een voorwerp zwembad elk soort voorwerpen, wil je het zwembad, en er is een nieuwe, trefwoord (dat is een voorbeeld van een), ter vervanging van het werk Om een object voor je.Vergeet niet dat de methoden, de interface, ipoolable, eisen.Om je geheugen te stabiliseren, is zeer belangrijk.Het kan je veel moeite besparen op je project, alles begon met een voorbeeld aan de gebeurtenissen nog steeds de luisteraar uit elkaar, vul je het voorwerp en de vuilnisman langzaam al het geheugen.Een goed voorstel is te vaak het voorwerp zwembad vanaf nu zal je vinden, je leven makkelijker, merkt ook op dat, hoewel het doel van deze handleiding is in het geheugen, is het concept van de wereldwijde: je kunt gebruik maken van de toepassing van het in de lucht en mobiele toepassingen en een partij het past.Bedankt voor het lezen.,

Bad memory usage
Good memory usage
Unhandled memory usage
Very good memory usage
Awesome memory usage



Previous:
Next Page: