gpt4 book ai didi

c# - 帮我优化这个平均计算片段

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:11:26 26 4
gpt4 key购买 nike

是否可以加快此代码段的速度?

firstSamplelastSample 是我对这次迭代感兴趣的数组的一部分。当这个间隔达到 > 3000 时,我会明显减速。 _average 数组可以包含 6-60 百万个 int 值。

minYma​​xY 是我在这个计算完成后使用的结果。

int minY = Int32.MaxValue;
int maxY = Int32.MinValue;
int Y = 0;
int sample = firstSample + 1;

while (sample <= lastSample)
{
Y = _average[sample];
minY = Math.Min(Y, minY);
maxY = Math.Max(Y, maxY);
sample++;
}

最佳答案

_average[sample] 表达式是一个巨大的瓶颈,因为它包含对每次迭代的隐式边界检查。使用指向“_average”数组的指针(和 unsafe 关键字)。然后避免调用任何函数,因此摆脱 Math.Min/Max 调用并自行检查。

现在我手边没有任何编译器,我认为它应该是这样的:

unsafe
{
fixed ( int* paverage = _average )
{
int* p = paverage + firstSample + 1;
for ( int sample = firstSample+1 ; sample <= lastSample ; sample++ )
{
if ( *p < minY )
minY = *p;
if ( *p > maxY )
maxY = *p;
p++;
}
}
}

最后,由于“sample”实际上并没有在循环中使用,您可以将其更改为一个递减计数到零的循环变量,这样循环终止检查是针对常量(零)而不是变量进行的.

关于c# - 帮我优化这个平均计算片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1053705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com