1

(私のプログラムの速度-実行時間に)違いはありますか?

最初のオプション:

 private void particleReInit(int loop)
        {
            this.particle[loop].active = true;
            this.particle[loop].life = 1.0f;
            this.particle[loop].fade = 0.3f * (float)(this.random.Next(100)) / 1000.0f + 0.003f; 
            this.particle[loop].r = colors[this.col][0];    // Select Red Rainbow Color
            this.particle[loop].g = colors[this.col][1];    // Select Red Rainbow Color
            this.particle[loop].b = colors[this.col][2];    // Select Red Rainbow Color
            this.particle[loop].x = 0.0f;
            this.particle[loop].y = 0.0f;
            this.particle[loop].xi = 10.0f * (this.random.Next(120) - 60.0f);
            this.particle[loop].yi = (-50.0f) * (this.random.Next(60)) - (30.0f);
            this.particle[loop].xg = 0.0f; 
            this.particle[loop].yg = 0.8f; 
            this.particle[loop].size = 0.2f;
            this.particle[loop].center = new PointF(particleTextures[0].Width / 2, particleTextures[0].Height / 2);

    }

2番目のオプション:

Particle p = particle[loop];
p.active = true;
p.life = 1.0f;
...


Particle particle[] = new Particle[NumberOfParticles];生命、位置などのいくつかのプロパティを持つパーティクルの配列は どこにありますか。


私はWFA(Windowsフォームアプリケーション)のようにVisual Studio 2010でそれを行っており、パフォーマンスを向上させる必要があります(OpenGLを使用できないため、パーティクルが多いほどプログラムが遅くなる傾向があります)。

4

3 に答える 3

4

私は確かに速度に違いがあることを期待します-結局のところ、それはより多くの仕事をしています。別のスレッドがステートメント間で配列の内容を変更した可能性があります。これは、このスレッド内に表示される場合と表示されない場合があります。これらがフィールドではなくプロパティである場合、プロパティセッターは、同じスレッド内の配列の値を変更する可能性もあります。これは、表示する必要があります。

速度の違いが大きいかどうかは別問題で、判断できません

さらに重要なことに、2番目の形式は既存のコードよりも明確であると言えます。

実際、これが実際に要素全体を再初期化することを意図している場合は、実際に新しい Particleものを作成し、それを要素に割り当てます。

particle[loop] = new Particle {
    active = true,
    life = 1f,
    // etc
};

...または、適切な状態でパーティクルを作成する別のメソッド/コンストラクタを作成します。

于 2012-05-30T16:15:44.297 に答える
2

速度の違いはごくわずかである可能性がありますが、ここでの速度の違いは無視できる可能性があります。読みやすく、保守しやすいバージョンを使用します。

個人的には、2番目のオプションの方がはるかに読みやすいので、私はあなたの2番目のオプションを好みます。

私はWFA(Windowsフォームアプリケーション)のようにVisual Studio 2010でそれを行っており、パフォーマンスを向上させる必要があります(OpenGLを使用できないため、より多くのパーティクルを使用すると、プログラムが遅くなる傾向があります)。

あなたの目標がパフォーマンスであるならば、私はこのルーチンがあなたの問題の核心であることを非常に疑っています。これはプロファイラーの下で実行する必要があります。実際にパフォーマンスを測定し、実際の問題を見つけるまでは、推測しているだけで、間違ったことを最適化するために時間を費やす可能性があります。

GDI +を使用した「パーティクル」のレンダリングはボトルネックになる可能性がはるかに高く、このルーチンを2つのオプション間で変更しても、知覚される速度に影響はありません。

于 2012-05-30T16:16:06.553 に答える
0

別の方法として、Particleを構造体にし、ループで順番に初期化します。これら2つのオプションのいずれよりもはるかに高速になると思います。

于 2012-05-30T18:26:42.690 に答える