gpt4 book ai didi

java - 几秒钟后,方法需要更长的时间来执行

转载 作者:行者123 更新时间:2023-12-01 17:26:44 24 4
gpt4 key购买 nike

我有这个方法:

public double sineWave(double t) 
{
return amplitude==0?0:Math.sin(t * frequency * Math.PI*2 + phase) * amplitude;
}

它由另一个类中的另一个方法调用,以生成简单正弦波的样本,然后将其添加到缓冲区中以发送到声卡。 t 是时间。由于某种原因,应用程序调用此方法的次数越多,速度就越慢。这毫无意义,15 秒后它就慢到足以使用我的 CPU 的整个核心并导致音频断断续续。

我 100% 确定是这段代码,因为如果我将其替换为 return 0,则运行它所需的时间(使用 System.nanotime() 测量)是恒定的.

为什么会发生这种情况?我可以做些什么来解决这个问题吗?

最佳答案

根据此处的信息 - 虽然不清楚缓冲区有多大,但每次迭代都会增加 t 。假设您的频率相当高,则每次迭代都会增加 Sin() 参数。检查参数是否不断增加到非常高的值。快速而肮脏的测试表明 Sin 性能下降 -

public class SinTest {
public static void main(String args[]) {
long angle = Long.parseLong(args[0]);
long startTime = System.nanoTime();
for(long l=0L; l<=1000000L; l++) {
Math.sin(angle);
}
long estimatedTime = System.nanoTime() - startTime;
System.out.println(estimatedTime);
}
}

$ java SinTest 100000
29181000
$ java SinTest 10000000
138598000

关于java - 几秒钟后,方法需要更长的时间来执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14307966/

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