Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问阵列时的速度差异_C#_Arrays_Winforms_Performance - Fatal编程技术网

C# 访问阵列时的速度差异

C# 访问阵列时的速度差异,c#,arrays,winforms,performance,C#,Arrays,Winforms,Performance,我的程序的速度-执行时间之间有什么区别吗 Particle p = particle[loop]; p.active = true; p.life = 1.0f; ... 第一选项: private void particleReInit(int loop) { this.particle[loop].active = true; this.particle[loop].life = 1.0f; this

我的程序的速度-执行时间之间有什么区别吗

Particle p = particle[loop];
p.active = true;
p.life = 1.0f;
...
第一选项:

 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[]=新粒子[NumberOfParticles]
只是一个粒子数组,具有生命、位置等属性



我在Visual Studio 2010中像WFA(Windows窗体应用程序)一样使用它,需要提高性能(我们无法使用OpenGL,因此对于更多粒子,我的程序往往速度较慢)。

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

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

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

事实上,如果这实际上是为了重新初始化整个元素,我会创建一个新的
粒子
,然后将其指定给元素:

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

。。。或者创建一个单独的方法/构造器,在适当的状态下创建粒子。

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

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

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

事实上,如果这实际上是为了重新初始化整个元素,我会创建一个新的
粒子
,然后将其指定给元素:

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

。。。或者创建一个单独的方法/构造器,在适当的状态下创建粒子。

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

就我个人而言,我更喜欢你的第二种选择,因为我觉得它更容易阅读

我在VisualStudio2010中像WFA(Windows窗体应用程序)一样使用它,需要提高性能(我们无法使用OpenGL..因此对于更多粒子,我的程序往往速度较慢)

如果你的目标是表现,我高度怀疑这种常规是你问题的核心。您应该在探查器下运行此操作。在你真正衡量自己的表现并发现真正的问题之前,你只是在猜测,很可能会花时间优化错误的东西


使用GDI+渲染“粒子”更可能是一个瓶颈,在两个选项之间更改此例程对感知速度没有影响。

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

就我个人而言,我更喜欢你的第二种选择,因为我觉得它更容易阅读

我在VisualStudio2010中像WFA(Windows窗体应用程序)一样使用它,需要提高性能(我们无法使用OpenGL..因此对于更多粒子,我的程序往往速度较慢)

如果你的目标是表现,我高度怀疑这种常规是你问题的核心。您应该在探查器下运行此操作。在你真正衡量自己的表现并发现真正的问题之前,你只是在猜测,很可能会花时间优化错误的东西


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

作为替代方法-使粒子成为结构,在循环中按顺序初始化它,我打赌它会比这两个选项中的任何一个快得多。

作为一个替代方案,将粒子作为一个结构,在循环中按顺序初始化它,我打赌它会比这两个选项中的任何一个快得多。

你可以通过在循环中执行十亿次来轻松测试这一点。我认为差异(如果有的话)将非常非常微小。在第二个选项中,您不必每次更改粒子时都使用数组的索引访问。我不能肯定这是否会提高性能,但它也有助于更好的阅读。除了访问
this.particle[loop].PropertyName
之外,您不是在强制对数组中的每个属性进行索引搜索吗?我认为在第二个选项中缓存引用是最好的方法。但是,除非您运行一个快速测试,否则您不知道。这是一种“dependecey封装”方法吗?您可以通过在循环中执行十亿次来轻松地测试它。我认为差异(如果有的话)将非常非常微小。在第二个选项中,您不必每次更改粒子时都使用数组的索引访问。我不能肯定这是否会提高性能,但它也有助于更好的阅读。除了访问
this.particle[loop].PropertyName
之外,您不是在强制对数组中的每个属性进行索引搜索吗?我认为在第二个选项中缓存引用是最好的方法。但是,除非您运行一个快速测试,否则您不知道。这是一种“dependecey封装”方法吗?构造函数在明显的上下文/可读性改进方面是否具有性能优势?谢谢,这正是