软件工程——数独 最终Release版本性能测试结果

测试环境

  • Windows10 64bit
  • Intel VTune Profile
  • AMD 2700x

sudoku.exe -c 1000000

生成1e6的数据量运行状况如下。

总用时

 最耗时函数

void copySudoku(const Sudoku& src, char* dst)
    {
        int k = 0;
        for (int i = 1; i < N_ROW_SUDOKU; i++)
        {
            for (int j = 1; j < N_ROW_SUDOKU; j++)
            {
                dst[k++] = src[i][j] + '0';
                dst[k++] = ' ';
            }
            dst[k - 1] = '
';//行末无空格
        }
        dst[k++] = '
';
        p_start_buff += k;
        return;
    }
if (is_end)
        {
            if (h_sudoku_txt)
            {
                WriteFile(
                    h_sudoku_txt,
                    SudokuPrinter::buff,
                    SudokuPrinter::num_sudoku_in_buff * SudokuPrinter::num_bytes_of_sudoku - 2,//最后两个换行不写入,即最后一个数独后面没有空行
                    &written,
                    NULL
                );
                closeTxt();
            }
        }
        else
        {
            if (h_sudoku_txt)
                WriteFile(h_sudoku_txt,
                    SudokuPrinter::buff,
                    SudokuPrinter::num_sudoku_in_buff * SudokuPrinter::num_bytes_of_sudoku,
                    &written,
                    NULL
                );
        }

有效CPU利用率直方图

从下图可以看出生成数独环节CPU占用率并不高。

 软件详细信息

程序占用内存仅为2MB

sudoku.exe -s problem.txt

求解1e6的数独,每个数独至少30个空,分析如下:

运行时间

最耗时函数

solveSudoku是求解数独的核心函数,也是占用时间最多的。

CPU利用率

从下图可以看出CPU利用率并不是很高。

软件详细信息

可以看出软件占用内存非常小,仅有4MB

总结

综合看来,数独生成和求解算法还是相当高效的。其中读取和写入并没有占据太多程序时间。

原文地址:https://www.cnblogs.com/harrypotterjackson/p/12209498.html