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);

    }

第二个选项:

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


WhereParticle particle[] = new Particle[NumberOfParticles];只是一组具有生命、位置等属性的粒子。


我在 Visual Studio 2010 中像 WFA(Windows 窗体应用程序)一样执行此操作,并且需要提高性能(我们无法使用 OpenGL,因此对于更多粒子,我的程序往往很慢)。

4

3 回答 3

4

我当然希望速度会有所不同——毕竟它正在做更多的工作。另一个线程可能在语句之间更改了数组的内容,这些内容在该线程中可能(或可能不)可见。如果这些是属性而不是字段,那么属性设置器甚至可以想象在同一个线程中更改数组中的值,这些值必须是可见的。

速度差异是否显着是另一回事,我们无法判断。

更重要的是,我想说第二种形式比现有代码更清晰。

事实上,如果这实际上是为了重新初始化整个元素,我实际上会创建一个 Particle元素,然后将其分配给元素:

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

...或创建一个单独的方法/构造函数,以适当的状态创建一个粒子。

于 2012-05-30T16:15:44.297 回答
2

虽然速度差异可能非常小,但这里的任何速度差异都可能可以忽略不计。我会使用最容易阅读和维护的版本。

就个人而言,我更喜欢您的第二个选项,因为我发现它更容易阅读。

我在 Visual Studio 2010 中像 WFA(Windows 窗体应用程序)一样执行此操作,并且需要提高性能(我们无法使用 OpenGL .. 所以对于更多粒子,我的程序往往很慢)。

如果您的目标是性能,我高度怀疑这个例程是您问题的核心。您应该在探查器下运行它。在你真正衡量你的表现并找到真正的问题之前,你只是在猜测并且可能会花时间优化错误的东西。

使用 GDI+ 渲染“粒子”更有可能成为瓶颈,并且在两个选项之间更改此例程不会对感知速度产生影响。

于 2012-05-30T16:16:06.553 回答
0

作为替代方案 - 使 Particle 成为一个结构,在循环中按顺序对其进行初始化,我敢打赌它会比这两个选项中的任何一个都快得多。

于 2012-05-30T18:26:42.690 回答