【发布时间】:2012-05-30 16:11:13
【问题描述】:
两者之间有什么区别(我的程序速度 - 执行时间)?
第一个选项:
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;
...
其中Particle particle[] = new Particle[NumberOfParticles]; 只是一个具有生命、位置等属性的粒子数组。
我在 Visual Studio 2010 中像 WFA(Windows 窗体应用程序)一样执行此操作,并且需要提高性能(我们无法使用 OpenGL,因此对于更多粒子,我的程序往往会很慢)。
【问题讨论】:
-
您可以通过循环执行十亿次来轻松地自行测试。我认为差异(如果有的话)会非常非常微小。
-
在第二个选项中,您不必每次更改粒子时都使用数组的索引访问器。我不能肯定这是否会提高性能,但它也有助于更好地阅读。
-
除了访问
this.particle[loop].PropertyName之外,您不是强制对每个属性的数组进行索引搜索吗?我认为在第二个选项中缓存引用将是最好的方法。但是,除非您进行快速测试,否则您不会知道。 -
这是一种“依赖封装”的方法吗?
标签: c# arrays winforms performance