1

以下のコードでは、変数 diff を使用して、粒子の目標位置と実際の位置の差を格納しています。その値をローカルの「var diff」に保存すると、メモリ割り当てが増えません。関数の外で宣言されたグローバルな「var diff」を使用するか、宣言を完全に省略して使用すると、膨大なメモリ割り当てが表示されます。グローバル変数を使用すると巨大な割り当てが発生するのはなぜですか?

私は作業を残しましたが、コードはコメントされていません。

余談ですが、グローバルに作成された場合、以下のパーティクル変数は割り当ての量を変更しません。どちらの場合も、コードは必要なタスクを実行します。

Chrome バージョン 30.0.1599.101 m でテスト済み

コード:

//Could also declare global for diff or particle out here with no change.
LoadingScreen.prototype.Update = function(delta)
{
    var size =  this.totalParticles - 1;
    while(size--)
    {
        //Works perfectly
        var particle = this.particleSystem.geometry.vertices[size];
        //Also works perfectly with no extra allocations.
        /* particle = this.particleSystem.geometry.vertices[size]; */
        if(size >= this.row)
        {
            //Works perfectly
            var diff = particle.gridy - particle.y;
            //Causes huge memory allocations garbage collection and the like
            /* diff = particle.gridy - particle.y; */
            if(diff < 5 * delta)
                particle.y = particle.gridy;
            else
                if(particle.y != particle.gridy)
                    particle.y += 500 * delta;
        }
    }
    this.row = this.totalParticles * (loadStatus.left / loadStatus.total);
    ...
};
4

0 に答える 0