巨大的性能下降,增加一个

时间:2014-05-04 22:01:03

标签: java performance

我正在制作一个blobscanner,目前我每秒大约有130帧。我有一个名为cornerPoints的矢量数组。如果我使用:cornerPoints[i].x = x;,那么我的frameRate高于100.如果我使用:

cornerPoints[i].x = x+1;

或:

cornerPoints[i].x = x;
cornerPoints[i].x ++;

然后我的frameRate下降约100帧。它怎么会产生如此大的影响? 可以做些什么。

protected void indexesToXY(int width, int height) {

       int x;

       for (int i = 0; i < nOfCornerIndexes; i++) {
           x = cornerIndexes[i] % width;

           // if i use x + 1 the frame rate drops with about 100 frames
           cornerPoints[i].x = x;
           cornerPoints[i].y = (cornerIndexes[i] - x) / width;
       }
       nOfCornerPoints = nOfCornerIndexes;

   }

2 个答案:

答案 0 :(得分:1)

尝试

       x = cornerIndexes[i] % width + 1;

       cornerPoints[i].x = x;

但是,我认为性能下降并非来自增加的成本。在您的程序的其他部分中,cornerPoints的值可能还有其他一些影响。

答案 1 :(得分:0)

我说它相当不可能。这种添加比模数,除法和数组访问等其他操作便宜得多。

可能的是,更改后的数据会对不同的代码产生一些影响。这就是为什么需要SSCCE(如评论中所述)。

查看生成的程序集(不是字节码!)可以告诉我们更多信息。有了SSCCE,人们就有机会对它产生兴趣,并且会花很多时间进行分析(没有SSCCE就没有希望)。