Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074

    problema di sovraccarico della CPU

    Ho un problema di sovraccarico della CPU, durante l'esecuzione del filmato Flash. Controllando il Task Manager, risulta che arriva oltre il 95% di media, e questo - ovviamente - è inaccettabile, anche perchè, su macchine meno potenti, significherebbe la paralisi...
    Ragionando sulle possibili cause di questo overflow, mi sono reso conto di della presenza di numerosi onEnterFrame.
    Alcuni di questi sono attribuiti, sulla timeline, a specifici mc (vedi esempio):
    codice:
    _root.payoff.onEnterFrame = function() {
    	var speed = 10;
    	payoff._width += (this.targetWidth-this._width)/speed;
    	payoff._height += (this.targetHeight-this._height)/speed;
    };
    mentre altri erano riferiti alla timeline stessa:
    codice:
    onEnterFrame = function() {
    ....
    };
    Tutti gli onEnterFrame presenti sono relativi a questa funzione di scala elastica. Già in fase di sviluppo, ho rilevato che, per ottenerne un corretto funzionamento, è necessario che la funzione sia dichiarata almeno un certo tempo (n frame) prima dell'esecuzione. E, al momento di attivarla, ciò deve essere fatto attraverso l'uso, ancora una volta, dell'onEnterFrame (vedi esempio):
    codice:
    onEnterFrame = function () {
    	payoff.move3(h/2-10, -170);
    	payoff.targetWidth = 420;
    	payoff.targetHeight = 37.9;
    };
    Ho provato ad evitare questo onEnterFrame creando e richiamando una funzione (vedi esempio) ma in questo caso non funziona, o funziona solo molto parzialmente:
    codice:
    function miaFunz() {
    	payoff.move3(h/2-10, -170);
    	payoff.targetWidth = 420;
    	payoff.targetHeight = 37.9;
    };
    _root.miaFunz();
    Ad un certo punto, mi sono detto: 'OK, lascio tutto così ed elimino gli onEnterFrame dopo che hanno svolto la loro funzione'.
    Così, ho allungato la timeline, par dare ampio spazio temporale all'esecuzione di tutte le funzioni richiamate, e poi ho inserito un sistema di eliminazione (vedi esempio):
    codice:
    _root.payoff.onEnterFrame = function() {
    	var speed = 10;
    	payoff._width += (this.targetWidth-this._width)/speed;
    	payoff._height += (this.targetHeight-this._height)/speed;
    	if (_root._currentframe == 600) {
    		delete this.onEnterFrame;
    		trace("cancellato 180");
    	}
    };
    Ho inserito il trace, per controllare che venisse effettivamente eseguita la funzione delete.
    Per gli onEnterFrame precedentemente attribuiti alla timeline, ho creato degli mc vuoti, li ho messi sullo stage, e quindi ho attribuito ad essi gli onEnterFrame.
    Però, quando vado ad effettuare la prova (in preview), ne risulta che:
    1) La finestra di output mi dice che tutti gli onEnterFrame sono cancellati (o perlomeno, mi mostra tutti i "cancellato + n° del frame"...)
    2) Alcune delle funzioni richiamate dagli onEnterFrame precedentemente attribuiti alla timeline, sembrano funzionare in modo imperfetto; in particolar modo - e stranamente - proprio la prima ad essere eseguita, e che quindi dovrebbe avere tutto il tempo necessario, si blocca più o meno prima della metà dell'azione (scala elastica)
    3) Il Task Manager mi dice che l'utilizzo della CPU rimane intorno al 95%!!!...
    Come posso risolvere?
    Qualcuno ha idee / suggerimenti / indicazioni di tutorial & simili per risolvere questo tipo di problema?
    Vorrei evitare di dover riscrivere tutto, utilizzando una funzione che possa far a meno degli onEnterFrame...

  2. #2
    Utente di HTML.it L'avatar di nep036
    Registrato dal
    Nov 2003
    Messaggi
    1,453
    Beh è un po difficile:

    in generale giustamente gli enterFrame sono pesantucci

    poi se ce ne sono tanti peggio

    se fai movimenti molto complessi, quindi ridimensionamenti elastici e spostamenti con acelerazioni il lavoro è tutto per la cpu

    se cio che muovi è una img o mc contenenti alpha e sfumature ancora peggio

    mai eseguire più movimenti contemporaneamente


    Diciamo sono le solite regole e non so se nel tuo caso le rispetti tutte o nessuna...

    Tu che pc hai?

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    Il PC è un Pentium IV, 2Ghz, con 256Mb di RAM.
    Le operazioni non avvengono tutte contemporaneamente, ma una dopo l'altra (grosso modo); il problema è che, anche una volta eseguite, quando non c'è alcuna azione in corso, l'utilizzo della CPU rimane prossimo al 100%!
    Ho fatto una ricerca nel forum, e ne ho ricavato che è necessario eliminare gli onEnterFrame, una volta utilizzati; il problema è che, come ho spiegato nel post precedente, anche effettuando questa operazione la CPU rimane sovraccaricata...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.