c# - 访问数组时的速度差异

标签 c# arrays winforms performance

两者之间有什么区别(我的程序速度 - 执行时间)?

第一个选项:

 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]; 只是一个 Particles 数组,它具有一些属性,例如生命、位置。


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

最佳答案

我当然希望速度会有所不同 - 毕竟它正在做更多的工作。另一个线程可能在语句之间更改了数组的内容,这些内容可能(或可能不)在此线程中可见。如果这些是属性而不是字段,属性 setter 甚至可以在相同线程内更改数组中的值,这将可见。

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

更重要的是,我认为第二种形式比现有代码更清晰

事实上,如果这真的意味着重新初始化整个元素,我实际上会创建一个 Particle,然后将其分配给元素:

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

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

关于c# - 访问数组时的速度差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10820108/

相关文章:

c# - 通过DataGridView向集合添加元素

c# - OpenSource .net SMS 库,我似乎根本找不到用于 C# 的库

c# - 使用数组作为参数的 ServiceStack Route

c# - WP8:更改BitMapImage时C#应用程序崩溃

android - 使用 GridView 和 ImageView 显示一些图像

c# - 用作变量错误的类型

c# - 应用程序池重启后缺少 Unity 配置

linux - Python RegEx 捕捉数组名称和大小之间的空白

javascript - 涉及数组和 json javascript 的基本 2d 游戏问题

c# - 在 Visual C# 中为列表中的每个对象创建图片框和标签