繁体   English   中英

为什么使用如此多的CPU声明一个数组,我该如何优化它?

[英]Why is declaring an array using so much CPU, and how can I optimize it?

我正在写一个国际象棋引擎作为学习项目。 要决定要做出什么样的举动,需要通过从当前的董事会状态进行4次移动来分析可以达到的所有董事会状态。 这意味着我必须分析数十万个电路板。

代码是可以理解的慢,所以我使用内置的Netbeans分析器来查看我应该优化哪个函数。 我惊讶地发现它只是在使用最多CPU的复制Board对象中创建新数组。

这是函数,它说使用最多的CPU,特别是init1()

private void initializeFields(Color active) {
    init1();
    init2(active);
    init3();
    init4();
}

private void init1() {
    //this line appears to be using a ton of CPU
    pieces = new Piece[SQUARES_PER_SIDE][SQUARES_PER_SIDE];
}

private void init2(Color active) {
    activePlayer = active;
}

private void init3() {
    moveHistory = new LinkedList<>();
}

private void init4() {
    possibleMoves = null;
}

以下是分析器结果:

在此输入图像描述

显然我明白,创建和查看大量的电路板意味着Board类中的一些小东西可能占用最多的CPU。 但是,我有两个问题:

1.为什么是一个数组的声明采取的任何withing最CPU Board

我期待移动计算或分析每个板状态的值,而不仅仅是创建数组。 我有可能错误地阅读结果吗?

2.在这种情况下,如何优化我的表现?

我理解如何优化算法,但我不知道如何优化数组声明。 我也不确定我可以使用什么更好的数据结构来表示8x8板而不是2维阵列。

  1. 为什么声明一个数组占用最多CPU的CPU?

因为这可能几乎就是你所做的一切。 在堆中搜索可用空间占用的时间比其他任何东西都多。

  1. 在这种情况下,如何优化我的表现?

只保留一块板并进行每次移动,测试并撤消每一步的移动。

如果你想要并行化,这是一个糟糕的方法,但它更快,更节省空间。 (好的电话@shmosel)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM